分段故障chkstk_ms C ++

时间:2016-08-09 05:25:43

标签: c++ c++11

在计算排序实现后,我需要帮助。是因为x的值太大了吗?我得到分段错误。这就是gdb所说的:

Program received signal SIGSEGV, Segmentation fault.
___chkstk_ms () at /usr/src/debug/gcc-5.4.0- 1/libgcc/config/i386/cygwin.S:146
146     /usr/src/debug/gcc-5.4.0-1/libgcc/config/i386/cygwin.S: No such file or directory.

这是代码片段,

void radix_sort::sort_array(int array[], int n)
{
    int arrayB[n];

    auto k = *std::max_element(&array[0], &array[n - 1]);
    auto m = *std::min_element(&array[0], &array[n - 1]);

    long int x = k - m + 1;
    int arrayC[x];

    for (auto i = 0; i < n; i++)
        arrayC[array[i] - m]++;

    for (long int i = 1; i < x; i++)
        arrayC[i] = arrayC[i] + arrayC[i - 1];

    for (auto i = n - 1; i >= 0; i--)
    {
        arrayB[arrayC[array[i] - m] - 1] = array[i];
        arrayC[array[i] - m]--;
    }

    for (int i = 0; i < n; i++)
        array[i] = arrayB[i];
}

1 个答案:

答案 0 :(得分:0)

arrayC[array[i] - m]++;

此时代码中没有分配arrayC的元素,因此增加了未知数字。这可能会爆炸

arrayB[arrayC[array[i] - m] - 1] = array[i];

几行后因为arrayC[array[i] - m]可能是负数或几十亿而且超出了我们所知道的范围。