为什么第一次迭代后的指针指向随机值?

Why pointer after first iteration points to random values?

本文关键字:随机 指针 第一次 迭代 为什么      更新时间:2023-10-16

这是我的代码,我认为每个cout行都会打印指针指向的相应对象。为什么会出现错误?这将打印一些随机的数字列表,第一个总是正确的。

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;
}

您的指针指向具有自动存储的数组。当函数返回并且指针悬空时,数组将死亡。

解决方案不是使用指针,而是使用矢量或动态数组。

本地数组在堆栈上创建,并具有自动存储持续时间。在你的情况下,数组是在堆栈上创建的,当函数 f(( 结束时被销毁。

有两种方法可以进行管理,以便 Array 在整个程序执行过程中保持活动状态。

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