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

C语言实现两数组对应元素相加代码运行段错误如何修复

C语言数组元素相加代码段错误修复

错误根因

段错误的核心诱因是multiply函数的返回值为栈上局部数组的地址:

  • 函数内部定义的int res[m]属于栈区局部变量,当函数执行完毕退出时,这块栈空间会被系统自动回收
  • 函数返回的res指针会变成野指针,main函数后续通过这个野指针访问内存时,直接触发段错误

另外存在逻辑不匹配问题:函数命名为multiply(乘法),实际执行的是数组对应元素相加的逻辑,属于命名歧义。

修复方案

这里选择动态内存分配的方案修复,修改后完整代码如下:

#include<stdio.h>
#include<stdlib.h>

// 函数名修改为和功能匹配的add_arrays,也可按需保留原命名
int* add_arrays(int *arr1, int *arr2, int m);

int main(void){
    int m = 0;
    
    printf("Enter size of array1 and array2 >");
    scanf("%d",&m);

    int arr1[m], arr2[m];
    printf("First array>");
    for(int i = 0; i < m; ++i){
        scanf("%d", &arr1[i]);
    }
    printf("Second array> ");
    for(int j = 0; j < m; j++)
       scanf("%d", &arr2[j]);

    int* result = add_arrays(arr1, arr2, m);
    printf("The resultant > ");
    for(int i = 0; i < m; ++i){
        printf("%d ", result[i]);
    }
    // 释放动态分配的内存,避免内存泄漏
    free(result);
    return 0;
}

int* add_arrays(int *arr1, int *arr2, int m){
    // 改用malloc在堆上分配内存,不会随函数返回被回收
    int *res = (int*)malloc(sizeof(int) * m);
    for(int i = 0; i < m; ++i){
        res[i] = arr1[i] + arr2[i];
    }
    return res;
}

验证效果

输入测试用例:

Enter size of array1 and array2 >3
First array>5 1 7
Second array> 2 4 2

将输出预期结果:

The resultant > 7 5 9

内容的提问来源于stack exchange,提问作者Suraj Panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:05