2016-11-19 7 views
-1
//function to merge sorted arrays 
void merge(int left[],int right[],int a[]){ 
    int lengthLeft=ARRAYSIZE(left);//ARRAYSIZE gets size of the array 
    int lengthRight=ARRAYSIZE(right); 
    int i=0,j=0,k=0; 
    while(i<lengthLeft&&j<lengthRight){ 
     if(left[i]<=right[j]){ 
      a[k]=left[i]; 
      i++; 
     } 
     else{ 
      a[k]=right[j]; 
      j++; 
     } 
     k++; 
    } 
    while(i<lengthLeft){ 
     a[k]=left[i]; 
     k++; 
     i++; 
    } 
    while(j<lengthRight){ 
     a[k]=right[j]; 
     k++; 
     j++; 
    } 
} 

コードは明らかに無限ループに入ります。これは、プログラムが停止したエラーを示しています。論理的には、まったく問題ないようですが、私は答えを得ていません。誰もこれで助けることができますか?私は、ソートされた2つの配列をC++でマージソート用のコードでマージする関数を書いていますが、動作していないようです。誰でもコード内の誤りを見つけることができますか?

+2

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

答えて

1

ARRAYSIZE(left)のような式は、配列のサイズが正しくないと確信しています。

したがって、lengthLeftlengthRightは無効な値を取得します。

int lengthLeft=ARRAYSIZE(left);//ARRAYSIZE gets size of the array 
int lengthRight=ARRAYSIZE(right); 

関数内の他のコードは正しいです。

配列の長さを関数に明示的に渡す必要があります。

関連する問題