|  | 
 
| 
本帖最后由 zsbit9611 于 2021-5-27 00:18 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 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函数退出你的程序 | 
 |