内存不足

时间:2018-02-12 16:09:11

标签: c pointers

由于某种原因,当我插入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;
    }
}

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发布。