首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求教一个运行异常

2013-12-13 
求教一个运行错误#includeiostreamusing namespace std//求数据的最大位数int maxbit(int data[], int

求教一个运行错误

#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个调试一下

热点排行