求教一个运行错误
#include<iostream>
using namespace std;
//求数据的最大位数
int maxbit(int data[], int n)
{
int d = 1; //保存最大的位数
int p = 10;
for (int i = 0; i < n; ++i)
{
while (data[i] >= p)
{
p *= 10;
++d;
}
}
return d;
}
void radixsort(int data[], int n)
{
int d = maxbit(data,n);
int* tmp = new int[n+10];
int* count = new int[11];
int i;
int j;
int k;
int radix = 1;
for (i = 1; i <= d; ++i)
{
for (j = 0; j < 10; ++j)
{
count[j] = 0; //每次分配前清空计数器
}
for (j = 0; j < n; ++j)
{
k = (data[i]/radix)%10; //统计每个桶中的记录数
count[k]++;
}
for (j = 1; j < 10; j++)
{
count[j] += count[j-1];
}
for (j = n-1; j >=0; --j)
{
k = (data[j]/radix)%10;
tmp[count[k] - 1] = data[j];
count[k]--;
}
for (j = 0; j < n; ++j)
{
data[j] = tmp[j];
}
radix *= 10;
}
delete []tmp;
delete []count;
}
int main()
{
int a[] = {12,34,56,79,55,42,45,91};
radixsort(a,8);
for (int i =0; i< 8; ++i)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
错误提示:
CRT has detected that the application wrote to memory before start of heap buffer
[解决办法]
http://cplus.about.com/od/learningc/ss/vc6compile_6.htm
[解决办法]
k = (data[i]/radix)%10;
这里i是不是越界了。
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
[解决办法]
for (j = n-1; j >=0; --j)
{
k = (data[j]/radix)%10;
tmp[count[k] - 1] = data[j];
count[k]--;
}
[count[k] - 1有小于0的情况存在。你可以把data数组改为2个调试一下