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 に答える