以下代码打印1到300之间的所有数字。 为什么不抛出分段错误?
编译:gcc版本4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)
此外,这与malloc(0) actually works?
不同#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int *pi = (int *)malloc(1);
int i = 0;
for(i = 0;i < 300;i++) {
*(pi + i) = i + 1;
}
for (i=0;i < 300;i++) {
printf("%d\n", *(pi + i));
}
return 0;
}
答案 0 :(得分:1)
malloc(0)
是实现定义的,它返回一个空指针或一个不能被解引用的指针。
取消引用malloc(0)
的结果会调用未定义的行为。