*注意:这不是一个重复的问题,因为你提到的答案没有回答我的问题。我知道malloc()和calloc()应该做什么,但想知道为什么在将它与虚拟机一起使用时似乎没什么区别。
我知道应该是什么区别 - malloc()只是为你分配内存,而calloc()用0' s初始化它。
问题是,在我的代码中它并没有显示出来,并且malloc()在从我的虚拟机Ubuntu运行时似乎没有任何区别。我运行了几次,malloc就像calloc一样。
注意 - 我刚刚用我的实际硬盘驱动器检查过它,它似乎工作正常,我得到了不同的结果。
代码:
transition
答案 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
- 已终止,但在大多数平台上,输出将为:
别的东西