C++计数排序代码修改后无输出及clock计时失效问题咨询
计数排序代码问题解答
1. 两份错误代码无输出的原因
两份错误代码和你所说的「原始正确代码」都存在同一个致命的数组越界错误,直接导致程序提前崩溃终止,走不到文件输出的逻辑:
- 计数数组
count的大小是max - min + 1,本题待排序数据范围为0~9999,因此count数组长度仅为10000。但三份代码的前缀和计算循环都错误地设置了上限为len = 100000,当循环变量i >= 10000时,访问count[i]属于越界访问内存,触发操作系统的段错误保护,程序被直接杀死,后续的文件写入逻辑完全不会执行,因此没有输出。- 错误代码1的文件写入逻辑在越界循环之后,程序崩溃时还没执行到打开输出文件、写入数据的步骤。
- 错误代码2的文件写入逻辑在main函数中,位于
count_sort调用之后,程序在count_sort内部的越界循环处就已经崩溃,根本不会执行到main里的写入逻辑。
补充说明:你所说的「原始正确代码运行结果无误」不符合代码逻辑,大概率是测试时数据范围、长度参数有误,按照你给出的参数该代码必然触发越界崩溃。
2. 所有代码中clock计时语句无法生效的原因
所有代码的计时输出语句都位于数组越界循环的下游:
- 原始代码的计时语句在
count_sort函数的末尾,处于越界前缀和循环之后,程序在越界访问时已经崩溃,不会执行到该行。 - 错误代码1、2的计时语句在main函数末尾,同样在越界循环执行之后,程序提前终止导致该行永远不会被执行。
内容的提问来源于stack exchange,提问作者init
相关产品推荐
相关产品推荐

