[英]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.