为什么未初始化的数组中有一些奇怪的数字?

时间:2014-07-07 16:18:52

标签: c arrays

我使用两种方法来创建数组。我曾经认为它们是相同的但它们看起来不同。

  char *buffer=malloc((sizeof(char)*100));
  char buffer1[100];
  strcpy(buffer,"Eric");
  strcpy(buffer1,"Eric");
for (int i=0; i<100; i++) {
    printf("%c",buffer[i]);
}
  printf("\n");
for (int i=0; i<100; i++) {
    printf("%c",buffer1[i]);
}

结果是

Eric
Eric?!^?{"Gl?(?!^?(?!^?@?!^?0?P?!^?

我检查了阵列,然后发现阵列中有一些奇怪的数字。但是为什么当我使用malloc创建数组时。奇怪的数字不存在?

1 个答案:

答案 0 :(得分:3)

显然,系统上的malloc正在清除返回的内存。这样做可以防止数据从一个进程泄漏到另一个进程,或者帮助调试。或者你可能刚刚幸运,下次malloc无法清除内存,例如,因为它来自一个已经过程本地的池。所以,不要指望它。 calloc可用于此目的。

第二种机制只是调整堆栈指针。在函数输入之前堆栈上的任何内容仍然存在。清除它会花费时间,因此C编译器不会生成代码。