counting sort运行内存错误

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:20:22
下面是counting sort的程序.运行时总显示****内存不能为written
counting sort的想法是开辟一个k大小的数组来放置小于k的数的个数.
在main中设置k的大小是10000..机子的内存是512m.按理说不会产生内存冲突吧?还是因为有系统以及其他程序内存与这个内存冲突呢??

void Counting_Sort(int A[],int B[],int k) //int done
{
int i,j; int C[INTMAX]; // n elements less than 10e4
for(i = 0; i <= k; i++)
C[i] = 0;

for(j = 1; j <= length(A); j++)
C[A[j]] = C[A[j]]+1;

for(i = 1; i <= k; i++)
C[i] = C[i] + C[i-1];

for(j = length(A); i >= 1; i--)
{
B[C[A[j]]] = A[j];
C[A[j]] = C[A[j]]-1;
}
}
谢谢您的回答.改了一下 C = (int*)malloc((k+1)*sizeof(int));
这样应该没有越界的问题了吧,intmax是10000

main函数里就一段调用的代码

printf("Counting_Sort n elements\n");
for(i = 1; i <= 10; i++)
{
n = pow(2,2*i);
C = (int*)malloc(n*sizeof(int));
B = Random_Int(n);
time(&Atime);
Counting_Sort(B,C,INTMAX);

缺少其他代码,不能确定那里有问题。
void Counting_Sort(int A[],int B[],int k) //int done
{
int i,j; int C[INTMAX]; // n elements less than 10e4
for(i = 0; i <= k; i++)
C[i] = 0; //这里,k和INTMAX的关系是什么?有可能C[k]下表越界啊!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for(j = 1; j <= length(A); j++)
C[A[j]] = C[A[j]]+1;
这个也有问题,呵呵。j最大到length(A),
而A[length(A)]显然也越界了。
要仔细检查错误啊!下面应该还有错误的,你好好检查!