2013-03-17 4 views
0

Je suis en train d'implémenter le tri de tas pour une affectation. Nous devons le faire comme elle l'a fait en classe avec son pseudo-code, sinon nous ne recevons pas de crédit.Heap Erreur de tri: La pile autour de la variable était corrompue?

Im obtenir une erreur d'exécution: Stack autour de la variable 'heapArray' a été corrompu. J'ai joué avec le débogueur, et je n'ai toujours pas réussi à comprendre ce qui cause l'erreur. Je suis assez sûr qu'il a quelque chose à voir avec ma boucle For dans la fonction HeapSort(). Quelqu'un peut-il aider?

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; 
} 

Répondre

0

erreur est:

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

Vous devez commencer à partir n-1 depuis index du tableau commence à 0. bonne façon de faire devrait être

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

l'index de la matrice hors erreur liée si vous démarrez à partir de n. Il est fort probable que le pseudocode dans votre livre (pour plus de commodité) utilise l'index de tableau de 1 à n, mais dans le vrai programme avec C++, nous devrions commencer à partir de 0 à n-1 à la place.

0

Vous écrivez en dehors des limites à

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

Dans les tableaux c passer de 0 à n-1. heapArray est déclaré avec taille SIZE.

devrait être plus comme:

for(int i = n - 1; i >=2; i--) //Now you start from n-1 
{ 
temp = heapArray[1]; 
heapArray[1] = heapArray[i]; 
heapArray[i] = temp; 
Questions connexes