Неверное возвращаемое значение во втором IntObject.getValue () - PullRequest
1 голос
/ 18 января 2012

Я реализую класс (точнее, Baseclass и классы, наследуемые от него), который содержит Integer.Теперь у меня проблема, что я могу вернуть указатель на значение только один раз .:

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

Функция getValue ничего не делает, кроме возврата указателя, я понятия не имею, почему он возвращает 4199696после первого getValue ().

Вот мой класс:

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

1 Ответ

2 голосов
/ 18 января 2012
virtual void setValue(int val){
    int a = val;
    value = &val;
};

В этой функции вы сохраняете адрес локальной переменной (val). Этот адрес станет недействительным, как только эта функция закроется, что сделает любую попытку разыменовать указатель (что вы делаете в getValue), который содержит этот адрес неопределенное поведение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...