返回并传递数组以在C++中运行
Return And Pass Array to function in C++
我正在尝试返回一个数组并将其传递给另一个函数:
int* getBasicArray(){
int amountArray[5];
amountArray[0]=1;
return amountArray;
}
void printArray(int (*amountArray)){
cout <<amountArray[0]<<endl;
}
int main()
{
int* test=getBasicArray();
cout <<test[0]<<endl; //Prints 1
printArray(test); //Prints 19354128
不知何故,当我尝试将其传递给简单的打印函数时,我的数组变得混乱。我做错了什么?
您返回一个指向临时本地对象的指针,该指针在退出函数后立即销毁。
你为什么不尝试std::vector
并摆脱指针?
std::vector<int> getBasicArray()
{
std::vector<int> amountArray(5);
amountArray[0]=1;
return amountArray;
}
void printArray(const std::vector<int> &arr)
{
for (auto &x : arr)
cout << x <<endl;
}
int main()
{
auto test = getBasicArray(); // std::vector<int> test = getBasicArray();
cout <<test[0]<<endl;
printArray(test);
}
您返回一个指向数组的指针,该数组是 getBasicArray
函数的局部变量。它是一个悬而未决的指针,取消引用它是未定义的行为。您可以尝试改为返回std::array
或std::vector
。这是一个使用 std::array
的示例:
std::array<int,5> getBasicArray()
{
std::array<int, 5> amountArray;
amountArray[0]=1;
return amountArray;
}
接下来,相应地修改函数。这是std::array
版本:
template <size_t N>
void printArray(const std::array<int,N>& amountArray)){
std::cout << amountArray[0] << std::endl;
}
这是std::vector
的:
void printArray(const std::vector<int>& amountArray)){
std::cout << amountArray[0] << std::endl;
}
getBasicArray
行为不佳,指针返回后将指向垃圾。如果您确实要分配数组,则必须使用 operator new[]
.
int* getBasicArray() {
return new int[5];
}
请注意,您不再使用自动存储,并且当您希望释放使用的内存时,必须调用 delete。
最简单的解决方案是,只是不要使用原始数组。它们有固有的问题,例如,您无法获得数组中的元素数量,它们很容易衰减等。
替代方案是std::vector
和std::array
.当您在编译时知道数组的大小时,请使用后者,当您在运行时知道数组的大小时,请使用前者。
在这种情况下,您在编译时知道大小,因此请使用 std::array。
std::array<int, 5> get_basic_array()
{
std::array<int, 5> arr;
arr[0] = 1;
return arr;
}
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- 控制允许动态运行c++的并发操作数
- 无法获取菜单选择以运行函数.C++