Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 计数排序中与内存相关的错误?_C_Arrays_Malloc - Fatal编程技术网

C 计数排序中与内存相关的错误?

C 计数排序中与内存相关的错误?,c,arrays,malloc,C,Arrays,Malloc,我一直在尝试实现计数排序 它向用户请求程序应运行的次数n。 将被排序的元素数sz和最大值k。虽然程序在n=1时运行正常,即运行一次,但在其他情况下会出现错误 #include <stdio.h> #include <stdlib.h> void cntsrt(int a[], int b[], int k); int sz; int main(int argc, char **argv) { int n, k,*b, *a, i, j; scanf

我一直在尝试实现计数排序

它向用户请求程序应运行的次数
n
。 将被排序的元素数
sz
和最大值
k
。虽然程序在
n=1时运行正常,即运行一次,但在其他情况下会出现错误

#include <stdio.h>
#include <stdlib.h>

void cntsrt(int a[], int b[], int k);

int sz;

int main(int argc, char **argv) {
    int n, k,*b, *a, i, j;

    scanf("%d", &n);

    while (n--) {
        scanf("%d", &sz);
        scanf("%d", &k);

        a = (int *) calloc(sz + 1, sizeof(int));

        for (i = 1; i <= sz; i++)
            scanf("%d", &a[i]);

        b = (int *) calloc(sz + 1, sizeof(int));

        cntsrt(a, b, k);
        printf("\n");

        for (j = 1; j <= sz; j++)
            printf("\t%d", b[j]);

        free((void*)a);
        free((void*)b);
    }

    printf("\n");

    return 0;
}

void cntsrt(int a[], int b[], int k) {
    int  i, j,*c;

    c = (int*) malloc(k*(sizeof(int)));

    for (i = 0; i <= k; i++)
        c[i] = 0;

    for (j = 1; j <= sz; j++)
        c[a[j]] = c[a[j]] + 1;

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

    for (j = 8; j > 0; j--) {
        b[c[a[j]]] = a[j];
        c[a[j]] = c[a[j]] - 1;
    }
}
#包括
#包括
无效cntsrt(int a[],int b[],int k);
int sz;
int main(int argc,字符**argv){
int n,k,*b,*a,i,j;
scanf(“%d”和“&n”);
而(n--){
scanf(“%d”和&sz);
scanf(“%d”和“&k”);
a=(int*)calloc(sz+1,sizeof(int));
对于(i=1;i
如果数组的长度是n,那么它的可访问索引是从0n-1

 a = (int *) calloc(sz + 1, sizeof(int));
for (i = 1; i <= sz; i++)
    scanf("%d", &a[i]);
 c = (int*) malloc(k*(sizeof(int)));
 for (i = 0; i <= k; i++)  // should be < k. There is no kth index
     c[i] = 0;