linux下學習mtrace記憶體泄漏除錯時遇到的問題,代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <mcheck.h>
void mtrace_malloc(int **p);
int main()
{
setenv("MALLOC_TRACE", "/var/tmp/mtraceOutput", 1);
mtrace();
int *p = NULL;
mtrace_malloc(&p);
printf("addr in main: %p\n", p);
//muntrace();
return 0;
}
void mtrace_malloc(int **p)
{
printf("addr in func: %p\n", *p);
}
終端輸出為:
addr in func: (nil)
addr in main: (nil)
查看mtrace日志資訊:
= Start
@ /lib/x86_64-linux-gnu/libc.so.6:(_IO_file_doallocate+0x94)[0x7f9818d7fe84] + 0x20838d0 0x400
@ /lib/x86_64-linux-gnu/libc.so.6:[0x7f9818e9683d] - 0x20832a0
@ /lib/x86_64-linux-gnu/libc.so.6:(tdestroy+0x36)[0x7f9818e18996] - 0x2083490
@ /lib/x86_64-linux-gnu/libc.so.6:[0x7f9818e96826] - 0x20834c0
@ /lib/x86_64-linux-gnu/libc.so.6:[0x7f9818e9696c] - 0x20838d0
可以看到有記憶體分配(第一行中“+”)的步驟,且后續進行了多次不同地址的記憶體釋放(其余行中“-”)
上述代碼中并無malloc及相關分配記憶體函式
求問為什么mtrace中會有記憶體分配的步驟,多次記憶體釋放的原因又是什么?
uj5u.com熱心網友回復:
mtrace();
看一下這個函式里怎么操作的。
uj5u.com熱心網友回復:
Linux不是開源的嗎?看_IO_file_doallocate函式中都干了什么。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285257.html
標籤:C語言
上一篇:C++類與常成員函式的創建
