访问冲突写入位置0x00000000。当将数组的大小增加到calloc时

时间:2015-10-02 08:39:02

标签: c access-violation calloc

我尝试将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;

}
}

谢谢

1 个答案:

答案 0 :(得分:4)

  

访问冲突写入位置0x00000000

这意味着您正在尝试使用NULL指针进行写入。因此calloc返回NULL

正如您可以在calloc manpage上看到的那样,它会在出错时返回NULL,这可能是一个太大的内存请求。
根据您的系统,13000 * 13000(169 000 000)可能太大。

始终检查malloccallocrealloc是否有错误。