2011-04-14 85 views
1
void sortAlphabetically(int listLength, contactInfo* arrayOfStructs) 
{ 
    contactType temp; 

    for (int i = 0; i < listLength; i++) 
    { 
     if (strcmp(arrayOfStructs[i].contactName, arrayOfStructs[i+1].contactName) > 0) 
     { 
        temp = arrayOfStructs[i]; //swapping entire struct 
        arrayOfStructs[i] = arrayOfStructs[i+1]; 
        arrayOfStructs[i+1] = temp; 
     } 
    } 
} 
+0

什麼錯誤是你的程序崩潰,到底是什麼? – Maxpm 2011-04-14 23:35:46

+0

更好的問題:你爲什麼要這樣做,而不是使用'std :: sort'? – 2011-04-14 23:36:32

+0

@maxpm program.exe已停止工作 – darko 2011-04-14 23:40:02

回答

2

下面的表達式是無效的,當i == (listLength-1)(假設listLength是元素的數量在arrayOfStructs計數):

arrayOfStructs[i+1] 
1

你應該重複最多隻listLength - 1,或檢查你是不是在引用arrayOfStructs[i+1]之前的最後一個元素。

0

我相信這是因爲以下行:

arrayOfStructs[i] = arrayOfStructs[i+1]; 
arrayOfStructs[i+1] = temp; 

更具體地說,i+1部分。如果您的for循環從零運行到listLength - 1,則在最後一次迭代中,您將嘗試訪問超過實際範圍的一個元素。

您可以使用i < listLength - 1來解決問題,或者只在循環中使用if語句。改變病情可能是更好的做法。

1

它看起來像你索引斷開界數組:

arrayOfStructs[i+1]

我認爲listLength是列表的長度,這意味着它比列表的最後一個元素多了一個。您有條件的i < listLength讓我保持在限制範圍內,但不是i + 1。

這可能會或可能不會導致崩潰。