malloc的分配比我要求的多吗?

时间:2014-05-24 11:54:26

标签: c gcc segmentation-fault malloc

以下代码打印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;
}

1 个答案:

答案 0 :(得分:1)

malloc(0)是实现定义的,它返回一个空指针或一个不能被解引用的指针。

取消引用malloc(0)的结果会调用未定义的行为。