2013-03-17 3 views
0

Я реализую кучу сортировки для задания. Мы должны делать это так же, как и в классе, с ее псевдокодом, иначе мы не получим кредит.Ошибка сортировки кучи: поврежден стек вокруг переменной?

Im получаю ошибку во время выполнения: Stack вокруг переменной 'heapArray' был поврежден. Я играл с отладчиком и все еще не мог понять, что вызывает ошибку. Я уверен, что это имеет какое-то отношение к моему циклу For в функции HeapSort(). Может ли кто-нибудь помочь?

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

ответ

0

Ошибка:

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

Вы должны начать с n-1, так как индекс массива начинается с 0. Правильный способ сделать должно быть

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

индекс массива из связанной ошибки, если вы начинаете с n. Весьма вероятно, что псевдокод в вашей книге (для удобства) использует индекс массива от 1 до n, но в реальной программе с C++ мы должны начинать с 0 до n-1.

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; 
Смежные вопросы