C 内存不足

C 内存不足,c,pointers,C,Pointers,由于某种原因,当我插入n=9999999时,我没有收到信息“内存不足”。 程序停止运行,出现以下错误: 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 (

由于某种原因,当我插入n=9999999时,我没有收到信息“内存不足”。 程序停止运行,出现以下错误:

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;
    }
}
inti,j;
int**a=(int**)malloc(n*sizeof(int*);
如果(**a==NULL){
printf(“内存不足\n”);
返回1;
}
对于(i=0;iDo

而不是

if (**a==NULL){
    printf("Not enough memory\n");
    return 1;
}
因为
malloc()

另外,不需要强制转换
malloc()
的返回值。请参阅文章

正如所指出的,这是

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中显式转换。请参阅文章。

测试
if(**a==NULL){
应该是
if(a==NULL){
,下一个应该是
if(a[i]=NULL){
。与数组指针数组不同,通常更有效的方法是分配一个单一的一维数组,并使用偏移量计算模拟二维方面。将这些分配封装在可以灵活分配或释放此类结构的函数中也是一个好主意。
a[i]=(int*)malloc(n*sizeof(int));
if (**a==NULL){
     printf("Not enough memory\n");
     return 1;
}