0

割り当てにヒープソートを実装しています。私たちは彼女がクラスで彼女の擬似コードを使って行ったのと同じ方法でそれをしなければなりません、さもなければ私たちは信用を得ません。

ランタイムエラーが発生しました:変数'heapArray'の周りのスタックが破損しました。デバッガーを試してみましたが、エラーの原因を特定できませんでした。HeapSort()関数のForループと関係があると確信しています。誰か助けてもらえますか?

void HeapSort(int heapArray[])
{   
    int heap_size = SIZE;
    int n = SIZE;
    int temp;

    Build_Max_Heap(heapArray);//function not implemented, only declared for compile

    for(int i = n; i >=2; i--) //***I think error coming from something in here
    {
        temp = heapArray[1];
        heapArray[1] = heapArray[i];
        heapArray[i] = temp;

        heap_size = heap_size-1;
        Max_Heapify(heapArray,1);//function not implemented, only declared for compile
    }

    return;
}

int main()
{
    int heapArray[SIZE] = {  5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55 };
    HeapSort(heapArray);


    cout << endl;
    return 0;
}
4

2 に答える 2

0

あなたはで範囲外に書いています

for(int i = n; i >=2; i--) 
{
temp = heapArray[1];
heapArray[1] = heapArray[i];  //THIS IS WRONG
heapArray[i] = temp;          //

cの配列では、0からn-1になります。heapArrayはサイズSIZEで宣言されています。

より似ている必要があります:

for(int i = n - 1; i >=2; i--) //Now you start from n-1
{
temp = heapArray[1];
heapArray[1] = heapArray[i];
heapArray[i] = temp; 
于 2013-03-17T21:25:02.377 に答える
0

エラーは次のとおりです。

for(int i = n; i >=2; i--) 

配列インデックスは0から始まるので、から始めるn-1必要があります。正しい方法は次のとおりです。

for(int i = n -1; i >=1; --i)

から開始すると、配列インデックスの範囲外エラーが発生しますn。あなたの本の擬似コードは(便宜上)1からまでの配列インデックスを使用している可能性が高いですがn、C ++を使用した実際のプログラムでは、代わりに0から開始する必要がありn-1ます。

于 2013-03-17T21:25:06.523 に答える