C语言实现降序数组创建与打印函数时运行异常问题求助
错误排查及成因说明
1 核心错误点
- 数组越界访问(最根本原因)
C语言中长度为value的数组合法下标范围是0 ~ value-1,你的代码中两处越界:createDescendingArray函数内循环初始值为i = value,直接访问a[value],属于非法内存访问,会篡改栈上的相邻数据(比如函数返回地址、其他变量值),直接导致输出混乱、程序异常。- 主函数中
arr1[value] = createDescendingArray(arr1)同样访问了arr1[value]这个非法地址,进一步加剧内存错乱。
- 返回值逻辑错误
createDescendingArray定义返回类型为int,但函数内部没有任何return语句,返回值是内存中的随机值,主函数将该随机值写入越界的arr1[value]位置,属于无意义操作。 - 填充逻辑不符合降序需求
现有循环for (i = value; i > 0; i--) {a[i] = i;}只会给a[1] ~ a[value]赋值,数组第一个元素a[0]完全未初始化,是随机垃圾值。且赋值逻辑为a[i] = i,会导致a[1]=1、a[2]=2…a[value-1]=value-1,打印出来自然是升序效果,完全不符合降序的预期。
2 修复后的代码示例
假设value已经通过#define value 你需要的长度方式提前定义,修复后代码如下:
数组打印函数
void printArray (int arr[]){ int i; printf("\n"); for(i = 0; i < value; i ++) printf("%3d ", arr[i]); }
降序数组创建函数
// 不需要返回值,直接修改传入的数组内存即可 void createDescendingArray(int a[]) { int i; printf("\nDescending array is created.\n"); // 下标从0到value-1,填充value、value-1…1的降序序列 for (i = 0; i < value; i++) { a[i] = value - i; } printArray(a); }
主函数
int main(){ int arr1[value]; createDescendingArray(arr1); // 也可以选择在主函数中打印,效果一致 // printArray(arr1); return 0; }
内容的提问来源于stack exchange,提问作者Natalia Ugolnikova
相关产品推荐
相关产品推荐

