coo*_*lio 0 c++ pointers scope
我期待下面的代码打印1,但它打印一个随机的大数字.我不明白为什么会这样,请指教.
#include <iostream>
using namespace std;
int * returnArray()
{
int myArray[5]={1,2,3,4,5};
return myArray;
}
void printArray(int * myArray)
{
cout << *myArray<< endl;
}
int main()
{
printArray(returnArray());
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,returnArray
返回指向myArray
函数本地的第一个元素的指针.当函数返回时,其局部变量的内存在弹出调用堆栈时释放,因此可用于其他目的.在这种情况下,由于您printArray
之后调用,最初占用的堆栈区域returnArray
将被重用printArray
,因此最初包含的内存myArray
现在具有不可预测的内容.
正如詹姆斯坎泽指出的那样,实现你想要的最好的方法可能就是使用std::vector<int>
而不是int*
像这样的东西
std::vector<int> returnArray()
{
int myArray[5] = { 1, 2, 3, 4, 5 };
std::vector<int> result(myArray, myArray + 5);
return result
}
Run Code Online (Sandbox Code Playgroud)
并相应地修改其他函数以获取向量.请注意,printArray
您需要myVector[0]
访问第一个元素,因为向量不是指针.