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;
}
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 为什么要为指针返回类型返回一系列字符?
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- 将原始指针返回到智能指针
- 从函数中的指针返回对象,例如链接列表
- 将指针返回使用New创建的数组数组
- 查找并将指针返回向量中的对象
- 函数可以将指针返回其自己的类型
- 指针返回值的地址
- 为什么静态指针返回函数中有一个"静态"键?
- 从弱指针返回类型返回共享指针
- 如何将C++引用和指针返回转换为 C++/CLR
- 从指针返回对象时出现意外的析构函数调用
- 阵列指针返回垃圾
- (C )当在同一类中调用时,污点指针返回正确的值,而从MAIN调用时为0
- C 从指针返回到成员功能
- 在构造函数以外的任何其他位置访问相机时,我的相机指针返回 null
- 从取消引用的指针返回原始指针
- 指针返回