gpt4 book ai didi

c++ - 第二个 IntObject.getValue() 的返回值错误

转载 作者:行者123 更新时间:2023-11-30 04:30:08 24 4
gpt4 key购买 nike

我正在实现一个类(或者更确切地说是一个基类,类继承自它),它包含一个整数。现在我遇到了问题,我只能将指向该值的指针返回一次。:

Inte foo =  Inte(5);
cout << foo.getValue() << endl; // 5
foo.setValue(10);
cout << foo.getValue() << endl; // 10
cout << foo.getValue() << endl; // 4199696

getValue 函数除了返回指针外没有做任何事情,我不知道为什么它在第一个 getValue() 之后返回 4199696。

这是我的课:

class Object {

public:
virtual int getValue() = 0;
virtual void setValue(int *pointer) = 0;
virtual string toString() = 0;

};


class Inte : public Object {
private:
int* value;
public:
Inte (int *val){
value = val;
}

Inte (int val){
int a = val;
value = &val;
}

virtual int getValue(){
return *value;
};

virtual void setValue(int *pointer){
value = pointer;
};

virtual void setValue(int val){
int a = val;
value = &val;
};

virtual string toString(){
stringstream ss;
string s;
ss << value;
ss >> s;
return s;
};
};

最佳答案

virtual void setValue(int val){
int a = val;
value = &val;
};

在此函数中,您存储局部变量 (val) 的地址。一旦此函数退出,此地址将变得无效,任何尝试取消引用保存此地址的指针(这是您在 getValue 中所做的)undefined behavior .

关于c++ - 第二个 IntObject.getValue() 的返回值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8911532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com