我尝试将calloc 2d数组和边缘单元格的初始值设置为255,它正常工作但是当我尝试设置超过12000 * 12000的数组维度时,VS2010显示访问冲突写入位置0x00000000
我的calloc 2d数组函数
int **calloc_2d_int(int Rows, int Cols) {
int *data = (int *)calloc(Rows*Cols,sizeof(int));
int **array= (int **)calloc(Rows,sizeof(int*));
for (int i=0; i<Rows; i++)
array[i] = &(data[Cols*i]);
return array;
}
主要功能
int main(int argc, char* argv[]){
int i,j;
/*convert string to int*/
int row = atoi(argv[1]);
int column = atoi(argv[2]);
int T = atoi(argv[3]);
int** s[2];
s[0] = calloc_2d_int(row,column);
s[1] = calloc_2d_int(row,column);
for(i=0 ; i<row ; i++){
s[0][i][0] = 255; //error at this line
s[1][i][0] = 255;
s[0][i][column-1] = 255;
s[1][i][column-1] = 255;
}
for(i=0 ; i<column ; i++){
s[0][0][i] = 255;
s[1][0][i] = 255;
s[0][row-1][i] = 255;
s[1][row-1][i] = 255;
}
}
谢谢
答案 0 :(得分:4)
访问冲突写入位置0x00000000
这意味着您正在尝试使用NULL
指针进行写入。因此calloc
返回NULL
。
正如您可以在calloc manpage上看到的那样,它会在出错时返回NULL
,这可能是一个太大的内存请求。
根据您的系统,13000 * 13000(169 000 000)可能太大。
始终检查malloc
,calloc
和realloc
是否有错误。