【发布时间】:2013-09-11 07:15:01
【问题描述】:
int main()
{
int *p=NULL;
p=malloc(8);
if (p==NULL)
printf("Mem alloc failed\n");
else
printf("Passed\n");
unsigned long int i=0;
for (i=2;i<=10000;i++)
p[i]=10; // I thought as we are increasing beyond malloc size of 8 bytes there should be segmentation fault but I was wrong.
printf("p[10000]= %d %d\n",p[10000]);
free(p);
return 0;
}
当我试图将 for 循环计数增加到
pow(2,32) ( for(i=2;i<=((pow(2,32)-1));i++))
在什么情况下会出现分段错误?
【问题讨论】:
-
您期望会发生什么?永远记住,“什么都没有发生”是未定义行为的一种可能结果。
-
“我认为当我们的 malloc 大小超过 8 字节时,应该会出现分段错误”——您为什么这么认为?您是否了解什么是段错误、导致它的原因以及 malloc 和它使用的操作系统支持如何工作?你为什么停在10000?