gpt4 book ai didi

c++ - 线程 1 : EXC_BAD_ACCESS (code 1) error

转载 作者:行者123 更新时间:2023-11-30 03:33:31 25 4
gpt4 key购买 nike

当我运行这个短程序时,我生成错误“Thread 1: EXC_BAD_ACCESS (code 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;
}

最佳答案

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

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

附言:

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

关于c++ - 线程 1 : EXC_BAD_ACCESS (code 1) error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42801223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com