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
相关产品推荐
相关产品推荐

