1. 看一下下面的代码,是否存在bug?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct {
int a;
int b;
int c;
int d;
} s_t;
typedef struct {
int m;
s_t *pt;
} z_t;
int main()
{
z_t z;
z.pt = malloc(sizeof(z.pt));
z.pt->a = 1;
z.pt->b = 2;
z.pt->c = 3;
z.pt->d = 4;
printf("%d-%d-%d-%d\n", z.pt->a, z.pt->b, z.pt->c, z.pt->d);
free(z.pt);
return 0;
};
.....
编译运行结果如下,打印结果完全正确。
2. 进一步分析
修改makefile, 打开address sanitizer:
gcc -g -O0 -fsanitize=address -fno-omit-frame-pointer main.c
再次运行,结果如下: