• 締切済み

Cygwinでの実行時に生じるエラーの原因を教えてください!

以下は2次元の配列を左に90度回転させるのにかかるサイクルカウントを計測するプログラムです。 --------------------------------------------------- #include "clock.h" #define N 512 typedef int matrix_t[N][N]; void naive_rotate(matrix_t src, matrix_t dst){ int i, j; double d; start_counter(); for(i=0; i < N; i++){ for(j=0; j < N; j++){ dst[N-1-j][i] = src[i][j]; } } d = get_counter(); printf("CycleCount:%f\n",d); return; } int main(){ int i,j; matrix_t a,b; for(i=0; i < N; i++){ for(j=0; j < N; j++){ a[i][j] = j; } } naive_rotate(a,b); return 0; } ------------------------------------------------- Nを64,128・・・,2048のそれぞれでこいつをコンパイル、 $ gcc -O2 -I../include L_rotate.c ../lib/libcsapp.a 実行すると、Nが512以上のときは $ ./a.exe 45 [main] a 8024 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) Segmentation fault (core dumped) と表示されてしまいます。libcsapp.aには問題はないので、このプログラム中のどこをどう直せばよいのでしょうか?

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

スタックオーバーフローが起きています。 設定を変えて強引に動作させることもできますが、matrix_t型のオブジェクトを自動変数にするのではなく、静的変数にするかmalloc等で割付けるようにしましょう。そして、naive_rotateには値渡しではなく、ポインタ渡ししてください。

関連するQ&A