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

时间:2019-11-26 06:19:55

标签: c++ function pointers

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

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;

}

2 个答案:

答案 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