一个小c++的基数排序程序,访存冲突,急急

来源:百度知道 编辑:UC知道 时间:2024/05/09 12:52:54
#include <iostream>
using namespace std;
void main(){
int *data=new int[10];
for(int x=0;x<10;x++){
cin>>data[x];
}
int r=1;
int remain;
int sort[10][10];
int *subsort=new int[10];
while(r<=10){
int index=0;
for(int j=0;j<10;j++){
remain=(data[j]/r)%10;
sort[remain][subsort[remain]]=data[j];
subsort[remain]++;
}
for(int s=0;s<10;s++){
if(sort[s][0]!=NULL){
for(int k=0;k<10;k++){
if(sort[s][k]!=NULL){
data[index]=sort[s][k];
index++;
}
}
}
}
r*=10;
}
cout<<data[0]<<endl;
}
我赋值之后,改过之后触发断点,破坏堆栈,还是不能执行

定义的时候给赋值
int subsort[10] = {0};
没有赋值的subsort会随机系统会随机分配一个数值,当然会出错了

你后面那一段改成
for(int s = 0; s < 10; s++) {
if(subsort[s] != 0)
for(int k = 0; k < subsort[s]; k++) {
data[k] = sort[s][k];
k++;
}
subsort[s] = 0;

}(这里有几层大括号,你自己数一下了,应该没有问题了)
r *= 10;

}

cout<<data[0]<<dedl;
}

int *subsort=new int[10];
这句定义了subsort,但是没有给里面的元素进行初始化,而紧接着就访问元素了:
sort[remain][subsort[remain]]=data[j];
因此,必然会导致错误