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

C++ 函数返回数组后打印除首元素外其余值异常问题咨询

问题触发原因

核心问题是你返回了栈上局部变量的指针:

  • 函数内定义的int result[11]是栈内存局部变量,函数执行结束后,这块内存会被系统自动回收,允许被后续操作覆盖。
  • 你拿到的返回指针指向的是已经失效的内存,访问属于未定义行为:第一次打印时内存还没被覆盖,能读到正确值,第二次打印前这块内存已经被cout操作的栈数据覆盖,就会出现随机乱码值。
  • 另外你写死数组长度为11也存在风险,入参变化时会导致数组越界写入。
修复方案

推荐优先用C++标准容器避免手动内存管理,可选方案如下:

方案1:返回std::vector(最推荐)

#include <iostream>
#include <vector>
using namespace std;

vector<int> getIntervalArray(int begin, int end, int interval) {
    int len = (end - begin) / interval + 1;
    vector<int> result(len);
    for (int i = 0; i < len; i++) {
        result[i] = begin + interval * i;
    }
    return result;
}

int main() {
    int begin = 0, end = 10, interval = 1;
    vector<int> newResult = getIntervalArray(begin, end, interval);
    cout << newResult[0] << endl;
    cout << newResult[1] << endl;
    return 0;
}

方案2:堆上动态分配内存返回(需手动释放)

如果必须返回原始指针,用new在堆上分配内存,堆内存不会随函数结束自动回收:

#include <iostream>
using namespace std;

int* getIntervalArray(int begin, int end, int interval, int& outLen) {
    outLen = (end - begin) / interval + 1;
    int* result = new int[outLen];
    for (int i = 0; i < outLen; i++) {
        result[i] = begin + interval * i;
    }
    return result;
}

int main() {
    int begin = 0, end = 10, interval = 1, len;
    int* newResult = getIntervalArray(begin, end, interval, len);
    cout << newResult[0] << endl;
    cout << newResult[1] << endl;
    delete[] newResult; // 用完必须手动释放,避免内存泄漏
    return 0;
}

方案3:调用方提前分配内存传入

由调用方负责内存生命周期,函数仅做填充逻辑:

#include <iostream>
using namespace std;

void fillIntervalArray(int begin, int end, int interval, int* result) {
    int len = (end - begin) / interval + 1;
    for (int i = 0; i < len; i++) {
        result[i] = begin + interval * i;
    }
}

int main() {
    int begin = 0, end = 10, interval = 1;
    int result[11] = {};
    fillIntervalArray(begin, end, interval, result);
    cout << result[0] << endl;
    cout << result[1] << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:08