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

C++编写createAndInput函数初始化数组并按引用返回大小问题求助

错误排查与修正方案

存在的问题

  • 函数名拼写错误:要求实现的函数名为createAndInput,当前代码写为creatAndInput,少了字母e。
  • 栈内存非法返回:代码中int arr1[size]是栈上分配的变长数组,首先C++标准不支持变长数组(VLA是C99特性,仅部分编译器通过扩展支持),其次栈内存在函数执行结束后会被自动回收,返回栈数组的指针属于野指针,访问会触发未定义行为,必须用new在堆上分配数组才能安全返回。
  • 循环条件书写错误:for循环的判断条件写为i << size,这是左移位运算符,不是你需要的小于判断i < size,会导致循环逻辑完全异常。
  • main函数不符合标准:C++标准规定main函数必须返回int类型,void main属于非标准写法,仅部分旧编译器兼容。
  • 业务逻辑缺失:代码中提示用户输入size,但实际没有读取用户输入的size值,直接固定了size2=10;此外定义的int *size1变量完全未使用,属于无效代码。
  • 返回值使用错误:cout << *creatAndInput(size2)只会输出数组的第一个元素,且堆分配的数组使用完没有调用delete[]释放,存在内存泄漏。

修正后的代码

#include <iostream>
using namespace std;

int* createAndInput(int& size)
{ 
    // 堆上分配指定大小的数组,函数结束后内存不会自动回收
    int* arr1 = new int[size];
    for (int i = 0; i < size; i++)
    {
        cout << "enter index " << (i + 1) << endl;
        cin >> arr1[i]; 
    }
    return arr1;
}

int main()
{
    cout << "enter size number" << endl;
    int size2;
    // 读取用户输入的数组大小
    cin >> size2;
    int* arr = createAndInput(size2);
    // 输出所有数组元素验证
    cout << "input array elements: ";
    for (int i = 0; i < size2; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    // 释放堆内存避免泄漏
    delete[] arr;
    return 0;
}

注意事项

  • 堆上分配的数组使用完成后必须调用delete[]释放,否则会出现内存泄漏。
  • 如果不想手动管理内存,可使用C++标准库的std::vector<int>替代原生数组,更安全也更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:12:06