|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zsbit9611 于 2021-5-27 00:18 编辑
linux下学习mtrace内存泄漏调试时遇到的问题,代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <mcheck.h>
-
- void mtrace_func(int **p);
-
- int main()
- {
- setenv("MALLOC_TRACE", "/var/tmp/mtraceOutput", 1);
-
- mtrace();
- int *p = NULL;
- mtrace_func(&p);
- printf("addr in main: %p\n", p);
- //muntrace();
-
- return 0;
- }
-
- void mtrace_func(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中会有内存分配的步骤,多次内存释放的原因又是什么?
你的程序没有内存怎么运行?
C库帮你申请内存,初始化资源,调用你的main函数,你的main函数返回后释放资源,释放内存,调用exit函数退出你的程序
|
|