2015-11-28 85 views
-1

我想對使用指針指針實現的字符串數組進行排序。我使用的代碼是:對指針進行排序指針

void sort(){ 
    char** names; 
    for(int i = 1; i < size; i++){ 
    int k = i; 
    while((strcmp(names[k],names[k-1]) < 0) && (k > 0)){ 
     char* temp; 
     temp = names[k]; 
     names[k] = names[k-1]; 
     names[k-1] = temp; 
     k--; 
    } 
    } 
} 

的名字已經被初始化,並瀰漫着另一種方法7名。我在這條線上遇到seg故障

names[k] = names[k-1]; 
names[k-1] = temp; 

但我不確定爲什麼。在while循環的第一次迭代之後,我得到了seg錯誤,並且k遞減爲0.它永遠不會返回for循環來再次遞增i和k。有人可以解釋爲什麼我得到seg故障以及如何解決它?

+0

'names'不能在另一種方法初始化,因爲它是在你所展示的是一個本地定義? –

+0

我只是這樣做,以顯示名稱是char **。它實際上並沒有在那裏聲明 – tcas271

+0

@ tcas271我們不知道你的char **是如何初始化或設置的。這本身可能是導致事故的原因之一。 – PaulMcKenzie

回答

2

(strcmp(names[k],names[k-1]) < 0) && (k > 0)是錯誤的。正確的方式是 (k > 0) && (strcmp(names[k],names[k-1]) < 0)

的順序很重要,因爲names[k-1]是不安全的讀取時k爲零。 &&總是首先計算其左操作數,僅計算其右操作數時,左邊的是true

+0

對,很好的接收! –

+0

哇,我沒有意識到訂單無關緊要,謝謝! – tcas271