代码如下,很简单的几行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为什么会这么报错误,不解!!!