我需要有关以下计数排序实现的帮助。是不是因为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];
}
In
arrayC[array[i] - m]++;
此时代码中没有以下元素arrayC
已被分配,因此未知的数字会增加。这可能会爆炸
arrayB[arrayC[array[i] - m] - 1] = array[i];
几行之后因为arrayC[array[i] - m]
可能是负数或几十亿,并且超出我们所知的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)