无法在C中找到malloc()和calloc()之间的区别(从虚拟机Linux运行)

时间:2016-07-22 08:22:51

标签: c linux malloc virtual-machine calloc

*注意:这不是一个重复的问题,因为你提到的答案没有回答我的问题。我知道malloc()和calloc()应该做什么,但想知道为什么在将它与虚拟机一起使用时似乎没什么区别。

我知道应该是什么区别 - malloc()只是为你分配内存,而calloc()用0' s初始化它。

问题是,在我的代码中它并没有显示出来,并且malloc()在从我的虚拟机Ubuntu运行时似乎没有任何区别。我运行了几次,malloc就像calloc一样。

注意 - 我刚刚用我的实际硬盘驱动器检查过它,它似乎工作正常,我得到了不同的结果。

代码:

transition

2 个答案:

答案 0 :(得分:6)

LaunchScreen.xib保证你有一个归零的内存块,而calloc没有。然后malloc可能会发生这种情况,但从不依赖它。

答案 1 :(得分:1)

从malloc获得的内存可以包含任何内容。它可能包含零或者可能包含其他内容。

以下示例显示(在大多数平台上)从malloc返回的内存尚未设置为0:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *p;
  int i;

  for (i = 0; i < 1024; i++) {
    p = malloc(1024);
    strcpy(p, "something else");
    free(p);
  }
  p = malloc(100);  // Get a fresh memory block
  printf("%s\n", p);  // You should not access the memory returned from malloc without assigning it first, because it might contain "something else".
  return 0;
}

该程序可以执行任何操作,我们甚至不知道该字符串是否为NUL - 已终止,但在大多数平台上,输出将为:

  

别的东西