gcc:释放一个struct之后,struct中char数组的值保持不变

时间:2017-06-17 05:24:51

标签: c gcc struct

我正在编写一个项目并找到一些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表现得像这样

0 个答案:

没有答案