0

我有一个非常奇怪的错误,我无法解决。我构建了一个简单的程序来计时一段简单的代码

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 时,我EXC_BAD_ACCESS在该行得到一个(代码 2,地址 = 0xfff5ecbd438)start = clock()

我在这里不知所措,因为我不知道更改数组大小会如何影响clock() 命令。

有任何想法吗?

4

2 回答 2

2

很可能您刚刚通过尝试将太大的数组分配为局部变量而破坏了堆栈。

2000 * 2000 * sizeof(int) 可能至少为 16MB。

它在那一点崩溃,因为数组是在之后声明的,那是堆栈分配发生的时候。

您可以通过将数组设置为全局和/或静态来将数组移出堆栈,但这可能有点麻烦,您最好使用 std::vector,它将正确分配和管理内存。

于 2013-02-18T10:44:10.243 回答
0

它可能会让您对错误有所了解。EXC_BAD_ACCESS 这意味着您正在尝试访问无效指针。

于 2013-02-18T11:09:56.947 回答