C++返回指针

Sin*_*Lok 1 c++ pointers

#include <iostream>
using namespace std;

int* createArray();

int main() {
    int *arr = createArray();
    cout << "Main: " << arr << endl;

    arr[0] = 0;
    arr[1] = 1;

    cout << arr[0] << endl;
    cout << arr[1] << endl;
}

int* createArray() {
    int arr[2];
    cout << "createArray()1: " << arr << endl;
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我只打电话给这个陈述

cout << arr[0] << endl;
Run Code Online (Sandbox Code Playgroud)

要么

cout << arr[1] << endl;
Run Code Online (Sandbox Code Playgroud)

可以显示正确的价值.但如果我同时打电话给两个声明,它就会显示出来

createArray()1: 00AFFAF4
Main: 00AFFAF4
0
11533068  //Don't show 1
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 5

指针返回createArray指向不存在的对象的指针.返回函数时,本地数组被销毁.当您取消引用悬空指针时main,程序的行为是不确定的.

解决方案:不要返回指向本地变量的指针或引用.在这种情况下,您可以返回数组的副本.您不能按值返回原始数组,但可以返回类似的包装器结构std::array<int, 2>.