线程1:EXC_BAD_ACCESS(代码1)错误

时间:2017-03-15 04:41:43

标签: c++ xcode pointers

当我运行这个短程序时,我生成错误"线程1:EXC_BAD_ACCESS(代码1)"。任何人都可以帮我确定问题的原因吗?

//populates matrix with rand nums
void popMat(int x[][4096]){
for(int i = 0; i < 4096; i++){
    for(int j = 0; j < 4096; j++){
        x[i][j] = rand() % 100;
    }
}
return;
}

int main(int argc, char * argv[]) {

int mat1 [4096][4096];
int mat2 [4096][4096];

popMat(mat1);
popMat(mat2);

for(int i = 0; i < 4096; i++){
    for(int h = 0; h < 4096; h++){
        printf("%d, %d\n", i, h);
    }

}

return 0;
}

1 个答案:

答案 0 :(得分:2)

假设4个字节为整数,int mat1 [4096][4096];需要64MB的内存。两个这样的阵列需要128 MB的存储器。在大多数系统中,创建局部变量的堆栈内存不能存储如此大的内存,并且会出现堆栈溢出。

一个简单的解决方案是移动数组是全局范围(不建议使用全局)。另一种解决方案是使用mallocnew动态分配这些数组。另一种解决方案是使用std::vector而不是静态分配的C数组。

PS:

  • 如果您决定动态分配它们,请不要忘记释放内存。
  • 即使您已修复此问题,您仍会看到rand()始终生成的相同值未调用srand()