我正在编写一个项目并找到一些bug,所以我写了一个小程序来重现并测试它,这里是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct str_a {
int a;
long b;
char buf[10];
};
int main() {
struct str_a *str1 = malloc(sizeof(struct str_a));
printf("%p\n", str1);
strncpy(str1->buf, "hello", sizeof(str1->buf));
free(str1);
struct str_a *str3 = malloc(sizeof(struct str_a));
printf("%p, %s\n", str3, str3->buf);
struct str_a *str5 = malloc(sizeof(struct str_a));
printf("%p, %s\n", str5, str5->buf);
return 0;
}
我正在使用gcc4.8,其输出是
0x139b010
0x139b010, hello
0x139b040,
这是问题,str3-&gt; buf是&#34;你好&#34;?我在我的项目中发现了同样的问题。我也使用gdb来调试它,我看到free(str1)之后,str1-&gt; buf仍然是&#34;你好&#34;。所以我在网上搜索并发现这个C - freeing structs它说< strong> free(testPerson)就够了,所以问题是什么,我也用vc ++和str3-&gt;测试它输出一些垃圾值,我认为是对的。那么为什么gcc表现得像这样