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

C语言如何将函数内数组通过指针返回至main程序及错误求解

问题根本原因
  1. 你在suma_arreglo函数内定义的arraysum属于栈区局部变量,它的生命周期仅和当前函数的运行周期绑定:函数执行结束后对应的栈帧会被系统回收,这块内存的内容会被后续其他操作覆盖,你返回的数组地址直接变成野指针,main函数访问该地址属于未定义行为,就会出现运行异常、输出乱码、程序崩溃等问题。
  2. 函数声明的返回值类型是int,但实际你要返回的是int*类型的数组指针,类型不匹配本身就存在编译错误。
修复方案

这里提供三种常用的可行实现,优先推荐第二种:

  • 方案一:将局部数组声明为静态存储
    把arraysum声明为static类型,静态变量存储在全局静态区,生命周期和整个程序运行周期一致,函数退出后内存不会被回收。需要注意静态数组不能使用变长定义,直接用你预设的宏MAX作为长度即可,同时修正函数返回值类型为int*。
// 修改后的函数实现
int* suma_arreglo(int x1[], int x2[], int y)
{
    int cont;
    static int arraysum[MAX]; // 静态数组,用常量定长

    for(cont = 0; cont < y; cont++)
    {
        arraysum[cont] = x1[cont] + x2[cont];
    }
    return arraysum;
}
  • 方案二:main函数预分配结果数组传参(最推荐)
    直接在main里定义存储结果的数组,把数组指针作为参数传入suma_arreglo直接写入,不需要返回值,也无需手动管理内存,不存在重入风险。
#include <stdio.h>
#include <stdlib.h>
#define MAX 10

// 修改后的函数声明
void suma_arreglo(int x1[], int x2[], int y, int res[]);

int array1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, array2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

// 函数实现
void suma_arreglo(int x1[], int x2[], int y, int res[])
{
    int cont;
    for(cont = 0; cont < y; cont++)
    {
        res[cont] = x1[cont] + x2[cont];
    }
}

int main()
{
    int cont = 0;
    int sum_res[MAX]; // 预分配结果数组
    suma_arreglo(array1, array2, MAX, sum_res);
    for(cont = 0; cont < MAX; cont++)
    {
        printf("\n%d + %d = %d", array1[cont], array2[cont], sum_res[cont]);
    }
    puts("");
    system("pause");
    return 0;
}
  • 方案三:函数内堆区申请内存
    在函数内用malloc在堆区申请内存,堆区内存需要手动调用free释放,避免内存泄漏。
// 修改后的函数实现
int* suma_arreglo(int x1[], int x2[], int y)
{
    int cont;
    int *arraysum = (int*)malloc(sizeof(int) * y); // 堆区申请内存
    for(cont = 0; cont < y; cont++)
    {
        arraysum[cont] = x1[cont] + x2[cont];
    }
    return arraysum;
}

// main内使用完后释放内存
// ... 遍历打印逻辑结束后
free(suma);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03