2013-02-18 101 views
0

我有一个非常奇怪的错误,我无法解决。我建了一个简单的程序时间的一个简单的代码片断从时钟()函数获取EXC_BAD_ACCESS错误

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()命令,所以我在这里感到不知所措。

任何想法?

+0

这是在IOS还是Mac?你知道数组'a'需要4 * 1000 * 1000 =〜4mb的堆栈吗? – JBRWilkinson 2013-02-18 10:45:29

回答

2

最有可能的是,你试图将太大的数组作为局部变量分配给堆栈。

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

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

您可以通过将数组全局和/或静态地将数组移出堆栈,但这可能有点冒险,并且使用std :: vector可能会更好,它将正确分配和管理内存。

+0

谢谢!无形的错误信息真的让我无法跟踪... – ethanf 2013-02-18 11:14:21

0

它可能会给你一些关于错误的想法。 EXC_BAD_ACCESS表示您正在尝试访问无效指针。