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

