Размер вектора изменяется после нажатия кнопки в QT - PullRequest
0 голосов
/ 28 марта 2012
Заголовочный файл

:

private:
vector<int*>* nums;

public slots:
void buttonClicked();

Файл cpp:

NewWindow(){
    int one = 1;
    int* pone = &one;
    int two = 2;
    int* ptwo = &two;

    vector<int*> numbers;
    numbers.push_back(pone);
    numbers.push_back(ptwo);
    nums = &numbers;

    test();
}

//Prints size of nums vector
void NewWindow::test(){
    stringstream woo;
    woo << nums->size()<<endl;
    cout << woo.str();
}

//I just had one button on my gui
void NewWindow::buttonClicked(){
    test();
}

Когда я запускаю это, первый метод теста выполняется в конструкторе и выводит 2, как и ожидалось.Однако после нажатия кнопки (т. Е. Выполнения метода buttonClicked ()) метод теста выдает, казалось бы, произвольное число (например, 4292719658).Немного покопавшись, я обнаружил, что если я сделаю вектор чисел атрибутом, метод test () будет каждый раз выводить 2.Почему я получаю странный вывод с числами как без атрибута?

1 Ответ

2 голосов
/ 28 марта 2012

Если numbers является локальной переменной, как здесь:

NewWindow(){
  vector<int*> numbers;
  nums = &numbers;
}

, то она уничтожается и перестает существовать, когда выходит из области видимости.В этом случае, когда возвращается функция NewWindow.Ссылка на несуществующий объект (как вы делаете через указатель nums) приводит к неопределенному поведению.

Если numbers является переменной-членом, с другой стороны, она уничтожается, когда объектчлен которого уничтожен.

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