计算排序错误消息

时间:2013-03-22 08:31:53

标签: arrays segmentation-fault malloc

我正在尝试使用C实现计数排序算法,但我在测试一百万个整数期间继续得到分段错误。有什么帮助吗?我的代码如下(“type.h”给出unsigned int数据类型的typedef“unit”):

#include <stdlib.h>
#include "csort.h"
#include <stdio.h>
#include "type.h"

unsigned int*
countingSort(unsigned int *A, int n) {
        uint i, j, l = 0, k = 0;
        uint *C;
        for (i = 0; i < n; i++)
            if (A[i] > k)
                    k = A[i];
        C = (uint*)malloc((sizeof(uint))*(k+1));
        for (i = 0; i <= k; i++)
            C[i] = 0;
        for (i = 0; i < n; i++)
            C[A[i]]++;
        for (i = 1; i < k; i++)
            for (j = 0; j < C[i]; j++)
                    A[l++] = i;
        free(C);
        return A;
}

我正在处理的输入是大数字,所以k很大。 n是输入数组中的整数数(百万)。

1 个答案:

答案 0 :(得分:0)

所有整数的最大值是多少?如果它非常大(比如2*10^9)那么你可能会遇到分配2*10^9 * sizeof(int)的问题,这可能会导致分段错误。