当我想使用dmalloc-5.5.2检查跨平台上的内存泄漏时。我包括dmalloc.h,通过mips-gcc-4.3编译它,并将其与/libdmalldm.a链接。应用程序工作正常,最后内存耗尽。但要像这样显示日志:
1451616386:4539:未从“data.c:808”中释放:“0x6af408 | s1”(560字节)
1451616386:4539:未从“data.c:808”中释放:“0x6af808 | s1”(560字节)
1451616386:4539:未从“data.c:808”中释放:“0x6af408 | s1”(560字节)
1451616386:4539:未从“data.c:808”中释放:“0x6af808 | s1”(560字节)
1451616386:4539:未从“data.c:808”中释放:“0x6afc08 | s1”(560字节)
1451616386:4539:未从“未知”中释放:“0x6b0008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b1008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b2008|s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b3008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b4008 | s5”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b5008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b7008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b8008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6b9008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6ba008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6bb008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6bc008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6be008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6bf008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c0008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c1008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c2008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c3008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c4008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c5008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c6008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c7008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c8008 | s5”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6c9008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6ca008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6cb008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6cc008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6cd008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6ce008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6cf008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6d0008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6d1008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6d2008 | s1”(2048字节)
1451616386:4539:未从“未知”中释放:“0x6d3008 | s1”(2048字节)
我认为未知的地方是内存泄漏的地方。但我不知道为什么dmalloc不能记录内存分配的文件和行。我读了关于dmalloc的文件。我发现:
通常,您可以通过strdup()或其他例程在中分配内存,因此,列出strdup例程中内存分配位置的日志文件无助于找到内存泄漏的真正来源—调用strdup的例程。如果没有跟踪调用堆栈的机制,库就无法查看调用方(可以说)的调用方是谁
但在dmalloc.h中,仍然存在:
dmalloc\u strndup(\uuuuuu文件,\uuuuu行,\uuuuuuuuu,(str),-1,0)
“未知”信息与strdup有关系吗?所以我的问题是,为什么dmalloc会打印“未知”信息
“未知是指没有相关文件和行信息的内存。如果您的C文件中没有包含dmalloc.h,或者您想跟踪系统功能中可能存在的内存泄漏,则这是必需的。”
“无法提供回信地址信息的系统改为显示‘未知’。”
http://dmalloc.com/docs/5.3.0/online/dmalloc_17.html
https://stuff.mit.edu/afs/sipb/project/gnucash-test/src/dmalloc-4.8.2/dmalloc.html