2012-12-13 166 views
0
int arr2[5]={5,4,3,2,1}; 
sortArray(arr2, 5); 

void sortArray(int data[], int size) 
{ 
    int i, j; 
    int element; 

    for (i = 1; i < size; i++) 
    { 
     element = data[i]; 
     j = i-1; 

     while (j >= 0 && element < data[j]) 
     { 
      data[j+1] = data[j]; 
      j--; 
     } 

     data[j] = element; 
    } 
} 

我的函數得到這個錯誤,當函數結束時我的數組看起來像這樣{5,5,5,5,5}爲什麼這樣?運行時檢查失敗#2 - 變量'arr2'周圍的堆棧已損壞

+2

在for循環的第一次迭代期間,在執行while循環後,j遞減爲-1,然後用作數據數組中的索引;這是你的堆棧損壞的原因。 – ryanbwork

+0

但它不應該做任何事情,如果j低於0 – Quaker

+0

得到它,修復'數據[j]'到'數據[j + 1]' – Quaker

回答

1

如上所述:在for循環的第一次迭代期間,在執行while循環之後,j遞減爲-1,然後用作數據數組中的索引;這是你的堆棧損壞的原因。

關於堆棧損壞的更多信息:當您引用數組的某個索引(IE數據[j])時,基本上說'開始於指向名爲data的指針指向的內存中的位置, * sizeof(int)字節,並獲取該值'。在代碼中,data[j]相當於*(data + (j * sizeof(int)))。當你給出一個負值時,你引用未分配給數據數組的內存;在這種情況下,內存恰好是堆棧的一部分。因爲您正在修改它,所以會出現堆棧損壞錯誤。

相關問題