这是我的代码,我认为每行指令将打印指针指向的相应对象。为什么会出现错误?这会打印一些随机的数字列表,首先总是正确的。
int* f()
{
int array[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = array;
return p;
}
int main()
{
int* ptr = f();
cout << *(ptr+0) << endl;
cout << *(ptr+1) << endl;
cout << *(ptr+2) << endl;
cout << endl;
}
答案 0 :(得分:8)
您的指针指向具有自动存储的数组。当函数返回并且指针悬空时,数组死亡。
解决方案不使用指针,使用向量或动态数组。
答案 1 :(得分:4)
本地数组在堆栈上创建,并具有自动存储期限。在您的情况下,数组是在堆栈上创建的,并在函数f()结束时被销毁。
您可以通过两种方式进行管理,以便在整个程序执行期间使阵列保持活动状态。
1)动态分配的数组
// c ++
int *array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
// c ++ 11
int *array{ new int[]{ 1, 2, 3, 4, 5 } };
请始终记住,如果需要释放空间,请使用delete []释放动态分配的数组。
2)静态数组
static int array[10] = {1,2,3,4,5,6,7,8,9,10};
静态变量是使用静态内存分配定义的变量。有关更多信息,请参见https://en.wikipedia.org/wiki/Static_variable