我正在使用解引用运算符,但是我似乎没有得到x的值。
#include <iostream>
using namespace std;
class Array {
public:
int* get() {
int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 };
int *r;
r = x;
return r;
}
};
int main() {
Array arr;
int *temp = arr.get();
for (int i = 0; i < 10; ++i) {
cout << temp[i] << " ";
}
}这将打印出31 32765 0 0 0 -1989689609 32624 -989639072 32765,而不是31 45 39 32 9 23 75 80 62 9
发布于 2021-09-25 21:47:30
当堆栈上分配的变量超出作用域时,它就会被销毁。在您的示例函数Array::get中
int* get() {
int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 };
int *r;
r = x;
return r;
}变量x被销毁。如果不希望发生这种情况,可以使用static关键字static int x[] = ...标记变量,或者在堆int* x = new int[10]上分配它。如果您使用后者,请确保在不再使用内存时将其释放或使用智能指针。
发布于 2021-09-29 08:58:47
您需要将其定义为class的私有成员
private:
int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 或者在函数内部设置为静态
static int x[] = { 31, 45, 39, 32, 9, 23, 75, 80, 62, 9 }; 在这两种情况下,这个x数组都将持续存在,并且您将能够从中获取值。否则,您的Get函数将只返回数组的第一个成员,当退出该函数的作用域时,其他成员将被清除。
https://stackoverflow.com/questions/69330184
复制相似问题