Q: 自分のPCで課題プログラムを動かすと segmentation fault (core dumped) となってしまうのですがどうしたらよいでしょうか?
A: 2次元配列を
# define N 1024 typedef int matrix_t[N][N]; int main(void) { matrix_t M; (以下略)のように宣言すると、M はスタック上に確保されます。 ところが Cygwin では、スタックサイズの上限が(特に指定しないと)2MB に なっているので、そのままでは 1024x1024x4 バイトの配列が確保できないのです。
一つの解決法は、配列用がスタック外にとられるようにすることです。 そのためには
なお、スタックサイズの上限は、Linux/Cygwin の bash を使っている場 合は ulimit -a コマンドで見ることができます。Linux ならば、ulimit -s によってスタックサイズを変更する方法もあるのですが、Cygwin の場 合は ulimit コマンドの -s オプションが使えません。かわりに、プログ ラムをコンパイルするときに gcc のオプションに
-Wl,--stack,5000000を指定すると(カンマの後にスペースを入れない)、スタックサイズを変 更することができます。(カンマの後に指定する数値の単位は kbytes で なくて bytes のようですが実験的に確認してください。) こうすれば、大きさ 4MB の配列をスタック上に確保できますが、4MB の 配列をスタック上にとった場合とスタック外にとった場合で性能が同じと は限りません(これはこれで実験の価値があります)。