我有一个非常奇怪的错误,我无法解决。我构建了一个简单的程序来计算一段简单的代码片段
clock_t start, diff;
start = clock();
const int N = 1000;
int a[N][N];
for(int i=0 ; i<N ; ++i){
for(int j=0 ; j<N ; ++j)
a[j][i] = 0;
}
diff = clock()-start;
int msec = (int) diff*1000/CLOCKS_PER_SEC;
printf("time: %d milliseconds", msec);
我在xcode上运行它(不确定这是否重要)并且运行正常但是当我将N更改为2000时,我在{{1}处得到EXC_BAD_ACCESS
(代码2,地址= 0xfff5ecbd438)行。
我在这里不知所措,因为我不知道更改数组大小会如何影响start = clock()
命令。
有什么想法吗?
答案 0 :(得分:2)
你很可能只是通过尝试将一个太大的数组分配为局部变量来吹嘘堆栈。
2000 * 2000 * sizeof(int)可能至少为16MB。
它崩溃了,因为数组是在之后声明的,那就是堆栈分配的时候。
你可以通过使数组全局和/或静态来将数组移出堆栈,但这可能有点hacky并且你可能最好使用std :: vector,它将正确地分配和管理内存。
答案 1 :(得分:0)
它可能会让您对错误有所了解。 EXC_BAD_ACCESS表示您正在尝试访问无效指针。