使用從interwebs某處取得的代碼,我試圖在我的程序中實現一個基數排序功能。該程序的輸入是一個包含大約120萬長整數的文本文件。我已經有一個maxSize = 1200000的數組存儲文本文件中的整數,所以當我在radixSort函數中創建工作數組時,我得到一個seg錯誤。有沒有辦法避免這種情況?避免C++基數排序中的分段錯誤?
這裏的驅動程序代碼:
case 5:
//Sort using Radix Sort
startTime = clock();
radixSort(array, size);
writeArray(radixFile, array, size);
radixFile.close();
endTime = clock();
timeUsed = (endTime-startTime)/(double)CLOCKS_PER_SEC;
cout << "Time elapsed: " << timeUsed << " seconds" << endl;
break;
與這裏的功能
void radixSort(int *array,int size){
int i,b[maxSize],m=0,exp=1;
for(i=0;i<size;i++){
if(array[i]>m)
m=array[i];
}
while(m/exp>0)
{
int bucket[10]={0};
for(i=0;i<size;i++)
bucket[array[i]/exp%10]++;
for(i=1;i<10;i++)
bucket[i]+=bucket[i-1];
for(i=size-1;i>=0;i--)
b[--bucket[array[i]/exp%10]]=array[i];
for(i=0;i<size;i++)
array[i]=b[i];
exp*=10;
}
}
也,數組創建的主要摘錄:
int main(){
int choice, size=0, x=0;
int *array = NULL;
array = new int[maxSize];
並在尺寸確定:
void readArray(ifstream &inputFile, int arr[], int &size){
size = 0;
while (inputFile >> arr[size]){
size++;
}}
關於哪條線路故障?程序崩潰時,局部變量是什麼? 'size'強制小於或等於'maxSize'在哪裏?它實際上是在創建'b'時嗎?如果是這樣,您可能需要更大的堆棧大小,或者您可能需要堆分配它。 – rutgersmike
我使用Code :: Blocks作爲編譯器,在哪裏可以找到有關故障的信息?大小由readArray函數確定,該函數將文本文件中的長整數存儲到數組中。 – user1850486
Code :: Blocks是一個IDE,而不是編譯器。您需要在調試器中運行該程序,或通過它運行生成的核心轉儲。不幸的是,調試器既不是編譯器也不是IDE。 – rutgersmike