簡體   English   中英

C ++返回指針

[英]C++ returning pointer

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

我不明白為什么只叫這句話

cout << arr[0] << endl;

要么

cout << arr[1] << endl;

可以顯示正確的值。 但是如果我同時調用這兩個語句,它將顯示

createArray()1: 00AFFAF4
Main: 00AFFAF4
0
11533068  //Don't show 1

createArray返回的指針指向一個不存在的對象。 函數返回時,本地數組被破壞。 當您取消引用main的懸空指針時,程序的行為是不確定的。

解決方案:永遠不要返回指向局部變量的指針或引用。 在這種情況下,您可以例如返回數組的副本。 您不能按值返回原始數組,但是可以返回包裝器結構,如std::array<int, 2>

您將返回一個指向局部變量的指針,該局部變量在功能塊末尾被銷毀。

但是請注意,當您使用new運算符時,您需要在其他位置使用delete(至少要使用智能指針)。

解:

int* createArray() {
    int* arr = new int[2];
    // your code
    return arr;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM