admin管理员组文章数量:1130349
代码如下,很简单的几行C代码。
#include <stdio.h>
#include <stdlib.h>
struct meminfo_t{
void *ptr;
char valid_flag;
}__attribute__((packed, aligned(1)));
struct meminfo_t minfo[2];
int main()
{
minfo[0].ptr = malloc(10);
minfo[1].ptr = malloc(10);
printf("If you press Ctrl+C now, valgrind will report definitely lost!\n");
sleep(5);
free(minfo[0].ptr);
free(minfo[1].ptr);
return 0;
}
编译运行后, 如果在第16行之后, sleep()时按下ctrl+c强制结束程序,
valgrind会报 definitely lost: 10 bytes in 1 blocks,而不是still reachable,
如果正常运行退出,则没有问题。
测试时使用valgrind v3.15.0版本。
后来发现是因为内存地址不对齐问题,结构体struct meminfo_t是单字节对齐,导致第2个变量的ptr地址不是8字节的整数倍,
但为啥valgrind为什么会这么报错误,不解!!!
代码如下,很简单的几行C代码。
#include <stdio.h>
#include <stdlib.h>
struct meminfo_t{
void *ptr;
char valid_flag;
}__attribute__((packed, aligned(1)));
struct meminfo_t minfo[2];
int main()
{
minfo[0].ptr = malloc(10);
minfo[1].ptr = malloc(10);
printf("If you press Ctrl+C now, valgrind will report definitely lost!\n");
sleep(5);
free(minfo[0].ptr);
free(minfo[1].ptr);
return 0;
}
编译运行后, 如果在第16行之后, sleep()时按下ctrl+c强制结束程序,
valgrind会报 definitely lost: 10 bytes in 1 blocks,而不是still reachable,
如果正常运行退出,则没有问题。
测试时使用valgrind v3.15.0版本。
后来发现是因为内存地址不对齐问题,结构体struct meminfo_t是单字节对齐,导致第2个变量的ptr地址不是8字节的整数倍,
但为啥valgrind为什么会这么报错误,不解!!!
版权声明:本文标题:诡异的valgrind内存泄漏问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1758641945a2782192.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论