STL里list 调用类似越界 内存泄漏问题

最近出现一些 Scudo ERROR问题,

crash err1:  Scudo ERROR: misaligned pointer when deallocating address 0xf528346c

具体如下:

F DEBUG   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
08-11 11:14:33.991 12170 12170 F DEBUG   : Abort message: 'Scudo ERROR: misaligned pointer when deallocating address 0xf528346c
08-11 11:14:33.991 12170 12170 F DEBUG   : '
08-11 11:14:33.991 12170 12170 F DEBUG   :     r0  00000000  r1  00002f1d  r2  00000006  r3  f0d7be88
08-11 11:14:33.991 12170 12170 F DEBUG   :     r4  f0d7be9c  r5  f0d7be80  r6  00000422  r7  0000016b
08-11 11:14:33.991 12170 12170 F DEBUG   :     r8  f0d7be88  r9  f0d7be98  r10 f0d7beb8  r11 f0d7bea8
08-11 11:14:33.991 12170 12170 F DEBUG   :     ip  00002f1d  sp  f0d7be58  lr  f3ac3f0d  pc  f3ac3f20
08-11 11:14:33.998 12170 12170 F DEBUG   : backtrace:
08-11 11:14:33.998 12170 12170 F DEBUG   :       #00 pc 00038f20  /apex/com.android.runtime/lib/bionic/libc.so (abort+172) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #01 pc 0002e823  /apex/com.android.runtime/lib/bionic/libc.so (scudo::die()+2) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #02 pc 0002ec2d  /apex/com.android.runtime/lib/bionic/libc.so (scudo::ScopedErrorReport::~ScopedErrorReport()+16) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #03 pc 0002edfb  /apex/com.android.runtime/lib/bionic/libc.so (scudo::reportMisalignedPointer(scudo::AllocatorAction, void*)+46) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #04 pc 0002fa85  /apex/com.android.runtime/lib/bionic/libc.so (scudo::Allocator<scudo::AndroidConfig, &(scudo_malloc_postinit)>::deallocate(void*, scudo::Chunk::Origin, unsigned long, unsigned long)+232) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #05 pc 0002f98f  /apex/com.android.runtime/lib/bionic/libc.so (scudo_free+18) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #06 pc 00025755  /vendor/lib/camera.device@3.4-external-impl.so (android::hardware::camera::device::V3_4::implementation::ExternalCameraDeviceSession::fillCaptureResult(android::hardware::camera::common::V1_0::helper::CameraMetadata&, long long, unsigned int)+228) (BuildId: c1de7995d3f833808f758b58bde736b1)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #07 pc 00025139  /vendor/lib/motorola.camera.device@3.4-external-impl.so (android::hardware::camera::device::V3_4::implementation::ExternalCameraDeviceSession::processCaptureResult(std::__1::shared_ptr<android::hardware::camera::device::V3_4::implementation::HalRequest>&)+176) (BuildId: c1de7995d3f833808f758b58bde736b1)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #08 pc 00023fe5  /vendor/lib/camera.device@3.4-external-impl.so (android::hardware::camera::device::V3_4::implementation::ExternalCameraDeviceSession::MotOutputThread::threadLoop()+1252) (BuildId: c1de7995d3f833808f758b58bde736b1)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #09 pc 0000edc9  /apex/com.android.vndk.v30/lib/libutils.so (android::Thread::_threadLoop(void*)+304) (BuildId: b5ae1bcebf1a17dc920028b3ac73b8d4)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #10 pc 0000e881  /apex/com.android.vndk.v30/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+264) (BuildId: b5ae1bcebf1a17dc920028b3ac73b8d4)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #11 pc 0008156b  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+40) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:33.998 12170 12170 F DEBUG   :       #12 pc 0003a42d  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-11 11:14:34.095     0     0 D logd    : logdr: UID=1047 GID=1005 PID=12170 n tail=50 logMask=8 pid=1058 start=0ns timeout=0ns

crash err2:  Scudo ERROR: corrupted chunk header at address 0xf0601fc0

08-12 13:25:42.028 29226 29226 F DEBUG   : Abort message: 'Scudo ERROR: corrupted chunk header at address 0xf0601fc0
08-12 13:25:42.028 29226 29226 F DEBUG   : '
08-12 13:25:42.028 29226 29226 F DEBUG   :     r0  00000000  r1  00007163  r2  00000006  r3  efcfaf18
08-12 13:25:42.028 29226 29226 F DEBUG   :     r4  efcfaf2c  r5  efcfaf10  r6  00006cda  r7  0000016b
08-12 13:25:42.028 29226 29226 F DEBUG   :     r8  efcfaf18  r9  efcfaf28  r10 efcfaf48  r11 efcfaf38
08-12 13:25:42.028 29226 29226 F DEBUG   :     ip  00007163  sp  efcfaee8  lr  f0e79f0d  pc  f0e79f20
08-12 13:25:42.039 29226 29226 F DEBUG   : backtrace:
08-12 13:25:42.039 29226 29226 F DEBUG   :       #00 pc 00038f20  /apex/com.android.runtime/lib/bionic/libc.so (abort+172) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.039 29226 29226 F DEBUG   :       #01 pc 0002e823  /apex/com.android.runtime/lib/bionic/libc.so (scudo::die()+2) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #02 pc 0002ec2d  /apex/com.android.runtime/lib/bionic/libc.so (scudo::ScopedErrorReport::~ScopedErrorReport()+16) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #03 pc 0002ecaf  /apex/com.android.runtime/lib/bionic/libc.so (scudo::reportHeaderCorruption(void*)+34) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #04 pc 0002fa8b  /apex/com.android.runtime/lib/bionic/libc.so (scudo::Allocator<scudo::AndroidConfig, &(scudo_malloc_postinit)>::deallocate(void*, scudo::Chunk::Origin, unsigned long, unsigned long)+238) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #05 pc 0002f98f  /apex/com.android.runtime/lib/bionic/libc.so (scudo_free+18) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #06 pc 00023fe9  /vendor/lib/motorola.camera.device@3.4-external-impl.so (android::hardware::camera::device::V3_4::implementation::ExternalCameraDeviceSession::MotOutputThread::threadLoop()+616) (BuildId: 17b4eec5467db312d99b3c0a246b7c14)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #07 pc 0000edc9  /apex/com.android.vndk.v30/lib/libutils.so (android::Thread::_threadLoop(void*)+304) (BuildId: b5ae1bcebf1a17dc920028b3ac73b8d4)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #08 pc 0000e881  /apex/com.android.vndk.v30/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+264) (BuildId: b5ae1bcebf1a17dc920028b3ac73b8d4)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #09 pc 0008156b  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+40) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)
08-12 13:25:42.040 29226 29226 F DEBUG   :       #10 pc 0003a42d  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: ae2fd0e1e31670d9e270e2c7d3e3c5a7)

刚开始以为是sp智能指针导致,经过分析定位,发现调用的std::list导致的, 当把list换成vector或者queue时,所有内存泄漏的问题都消失了。从网上找到一些答案。

得知List并没有真正导致内存泄漏,而是VS本身的 _CrtDumpMemoryLeaks()函数的执行位置的问题。

参考下如下的链接分析:

(15条消息) STL里list、vector、queue性能差异与疑似内存泄漏问题_lsldd的专栏-CSDN博客_list queue 效率

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在C++的STL(Standard Template Library)中,`list`是一个双向链表(doubly linked list)的容器类。它提供了一组用于操作链表的方法和算法。 要使用`list`,需要包含头文件`<list>`,然后使用`std::list`来定义一个链表对象。例如: ```cpp #include <list> std::list<int> myList; // 定义一个存储整数的链表 ``` `list`类提供了一系列的方法,可以在链表中进行插入、删除、访问等操作。下面是一些常用的方法示例: - `push_back(value)`: 在链表末尾插入一个元素。 - `push_front(value)`: 在链表头部插入一个元素。 - `pop_back()`: 删除链表末尾的元素。 - `pop_front()`: 删除链表头部的元素。 - `front()`: 返回链表头部的元素。 - `back()`: 返回链表末尾的元素。 - `insert(iterator, value)`: 在指定位置插入一个元素。 - `erase(iterator)`: 删除指定位置的元素。 除了上述方法之外,`list`还提供了其他一些方法和迭代器,可以方便地遍历、查找、排序等操作。 以下是一个示例代码,展示了如何使用`list`进行插入、删除和遍历操作: ```cpp #include <iostream> #include <list> int main() { std::list<int> myList; myList.push_back(1); myList.push_back(2); myList.push_back(3); std::cout << "List elements: "; for (auto it = myList.begin(); it != myList.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; myList.pop_front(); std::cout << "List elements after pop_front(): "; for (auto it = myList.begin(); it != myList.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; } ``` 这是`list`的基本用法,你可以根据需要选择适合的方法来操作链表。希望能帮到你!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值