自定义排序算法无输出但退出码为0,请求故障排查(附代码)
问题分析与修复
你的代码核心问题是数组越界访问,这属于C++中的未定义行为,可能导致程序看似正常结束但没有预期输出,甚至出现其他异常。具体错误点和修复方式如下:
错误点
- 内层循环边界错误:
内层循环for(int j=i+1; j<=n; j++)中,j<=n会让j取值到7,但你的数组有效元素只有7个(索引0到6),访问a[7]属于越界访问未初始化的内存。 - 输出循环边界错误:
输出循环for(int x=0; x<=n; x++)同样会访问a[7],进一步加剧越界问题。
修复后的代码
#include <iostream> using namespace std; void sortAlgo(int *a, int n){ int tmp; // 外层循环遍历所有有效元素 for (int i=0; i < n; i++){ // 内层循环从i的下一个元素开始,遍历到最后一个有效元素 for(int j=i+1; j < n; j++){ if(a[i]>a[j]){ tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } } // 输出所有有效排序后的元素 for(int x=0; x < n; x++){ cout<<a[x]<<" "; } // 刷新输出缓冲区,确保内容正常显示 cout << endl; } int main(){ int arr[10]={1,2,3,5,23,12,4}; sortAlgo(arr, 7); }
修复说明
- 将所有循环的边界条件从
<=n或<=n-1改为<n,确保只访问数组的有效索引范围(0到n-1)。 - 添加
cout << endl;强制刷新输出缓冲区,避免因缓冲区未刷新导致的无输出问题。
内容的提问来源于stack exchange,提问作者Aryan Arora
相关产品推荐
相关产品推荐

