我从H
函数声明TwoDimArray
为2D动态数组。当行(标记为**
)执行时,编译器显示错误:
Access violation writing location 0x61d1e5bc.
小lenA& lenB值(如250),没有任何问题!
int lenA=100030;
int lenB=100030;
int **H;
int TwoDimArray(int ***x,int nRow,int nCol)
{
int i;
*x=(int **)malloc(nRow*sizeof(int *));
if(*x==NULL)
return 1;
(*x)[0]=(int *)malloc(nCol*nRow*sizeof(int));
if((*x)[0]==NULL)
return 2;
for(i=1;i<nRow;i++)
(*x)[i]=(*x)[i-1]+nCol;
return 0;
}
TwoDimArray(&H, lenB, lenA);
for(int j=0;j<lenA;j++){
H[0][j]=0;
}
** for(int i=0;i<lenB;i++){
H[i][0]=0;
}
答案 0 :(得分:6)
一个32位整数的100030
x 100030
数组需要40GB的RAM。您的流程是否可以访问这么多内存?
很可能第二个malloc
失败了。但是,您的代码会忽略失败并继续执行。