2013-03-31 53 views
-4

當使用稱爲tubor sort的算法對數組進行排序時,我實現了它,當我運行它時,我得到了段錯誤。即使我搜查了網絡,在那裏沒有類似的錯誤,我決定在這裏發帖。這個錯誤可能是因爲我將for循環中的輔助數組的大小設置爲數組的大小,是否有更好的方式來編寫此代碼?以下是來源。排序中的分段錯誤

#include <stdio.h> 

void TuborSort(int* array) { 
    int aux[5] = { 0, 0, 0, 0, 0 }; 
    int i; 

    for (i = 0; i < sizeof(array); i++) { 
    aux[array[i]]++; 
    } 

    int j = 0; 
    for (i = 0; i < 5; i++) { 
    while(aux[i]-- > 0) { 
     array[j++] = i; 
    } 
    } 
} 

int main() { 
    int array[6] = {2, 5, 1, 4, 1}; 
    int i; 

    TuborSort(array); 

    for (i = 0; i < sizeof(array); i++) 
    printf("%d ", array[i]); 

    return 0; 
} 
+1

array的大小是6 ... aux的大小是5 – maditya

+0

int * array' - > sizeof(array)//作爲指針大小 – BLUEPIXY

+3

7 downvotes?!!爲什麼? – cnicutar

回答

3

你是說aux[array[i]]++和aux只有5個元素長。所以array(5)中的第二個元素太大被用作aux的索引。


作爲一個側面說明,你使用sizeof是錯誤的方式,你需要通過數組的長度作爲附加參數。

由於阿列克謝指出,在main的供應:

size_t i; 
for (i = 0; i < sizeof(array)/sizeof(*array); i++) 
+1

旁註是相當關鍵 –

+0

'sizeof'在兩個地方都是錯誤的。 –

+0

@AlexeyFrunze好的電話,我沒有注意到第二個'sizeof'。 – cnicutar

3

sizeof(array)TuborSort()功能是不恰當的。正如你所宣稱的arrayint *而不是6個整數的數組,這不是你想要的。

此外,而不是sizeof你想要數組中的元素數量,這是sizeof(array)/sizeof(array[0])

0

對於瞭解Java的人來說,這是一個非常常見的錯誤,c和C++中的指針的大小來源於PC上的體系結構(通常爲32/64位)。

一旦你傳遞了一個指針數組,你必須發送它的長度,否則你不知道它的長度是多少

+0

32/64位 - 說誰? –

+0

@AlexeyFrunze通常添加 – 0x90