前提
大学の課題で、C言語でマージソートを実行する関数を作っています。
引数は整数のデータ配列a、配列の左右の端のデータl,rの3つを使うよう指定されており、main関数が記述された他のファイルと一緒にコンパイルして実行します。
Linuxサーバでコンパイルして実行したところ、Segmetation fault(コアダンプ)が出てしまいました(コンパイルではエラーは出ませんでした)。
ソートを行うデータ配列の要素数は100万です。
何度かプログラムの流れをトレースしてみましたが原因が分からず、どこでエラーが起きているのか教えていただけると助かります。
発生している問題・エラーメッセージ
Segmentation fault (コアダンプ)
該当のソースコード
C言語
1void merge_sort( int a[], int l, int r ){ 2 int tmp[20000000]; 3 int m,i,j,k; 4 5 if(r>l){ 6 m=(l+r)/2; 7 merge_sort(a,l,m); 8 merge_sort(a,m+1,r); 9 10 //tmp配列に前半のデータをコピー 11 for(i=l;i<m+1;i++){ 12 tmp[i]=a[i]; 13 } 14 i++; 15 //tmp配列に後半のデータを逆向きにコピー 16 for(j=r;j<m;j--){ 17 tmp[i]=a[j]; 18 i++; 19 } 20 i=l; 21 j=r; 22 23 //2つの配列の小さい要素を配列aにコピーする処理を繰り返す 24 for(k=l;k<r+1;k++){ 25 if(tmp[j]<tmp[i]){ 26 a[k]=tmp[j]; 27 j--; 28 }else{ 29 a[k]=tmp[i]; 30 i++; 31 } 32 } 33 } 34}
試したこと
データを一時的に保存するtmp配列の要素数を増やしましたが改善しませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/08 14:07
2022/12/08 15:02
2022/12/08 15:03
2022/12/08 15:04