You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现降序数组创建与打印函数时运行异常问题求助

错误排查及成因说明

1 核心错误点

  • 数组越界访问(最根本原因)
    C语言中长度为value的数组合法下标范围是0 ~ value-1,你的代码中两处越界:
    1. createDescendingArray函数内循环初始值为i = value,直接访问a[value],属于非法内存访问,会篡改栈上的相邻数据(比如函数返回地址、其他变量值),直接导致输出混乱、程序异常。
    2. 主函数中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:45:05