由于某种原因,当我插入n = 99999999时,我没有收到消息“内存不足”。 程序停止运行,我收到以下错误:
Process returned -1073741819 (0xC0000005) execution time : 6.449 s
为什么会这样?
int i, j;
int **a=(int**)malloc(n*sizeof(int*));
if (**a==NULL){
printf("Not enough memory\n");
return 1;
}
for (i=0; i<n; i++) {
a[i]=(int*)malloc(n*sizeof(int));
if (**a==NULL){
printf("Not enough memory\n");
return 1;
}
}
答案 0 :(得分:1)
做
if (a==NULL){
printf("Not enough memory\n");
return 1;
}
而不是
if (**a==NULL){
printf("Not enough memory\n");
return 1;
}
因为malloc()
返回指向已分配内存的指针,如果成功分配给a
(不是**a
或*a
)。
此外,无需转换malloc()
的返回值。请参阅this帖子。
正如P.P.指出的那样,它是
a[i]=malloc(n*sizeof(int));
if (a[i]==NULL){
printf("Not enough memory\n");
return 1;
}
而不是
a[i]=(int*)malloc(n*sizeof(int));
if (**a==NULL){
printf("Not enough memory\n");
return 1;
}
编辑:请注意,malloc()
的返回值无需在C中显式转换。请参阅this发布。