admin管理员组

文章数量:1531696

代码如下,很简单的几行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