使用从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