当我运行这个短程序时,我生成错误"线程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;
}
答案 0 :(得分:2)
假设4个字节为整数,int mat1 [4096][4096];
需要64MB的内存。两个这样的阵列需要128 MB的存储器。在大多数系统中,创建局部变量的堆栈内存不能存储如此大的内存,并且会出现堆栈溢出。
一个简单的解决方案是移动数组是全局范围(不建议使用全局)。另一种解决方案是使用malloc
或new
动态分配这些数组。另一种解决方案是使用std::vector
而不是静态分配的C数组。
PS:
rand()
始终生成的相同值未调用srand()
。