在QT中按下按钮后矢量大小发生变化

时间:2012-03-27 21:06:34

标签: c++ qt

头文件:

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 个答案:

答案 0 :(得分:2)

如果numbers是一个局部变量,就像它在这里:

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

当它超出范围时,它就会被破坏,并且不再存在。在这种情况下,当NewWindow函数返回时。引用不存在的对象(就像通过nums指针一样)会导致未定义的行为。

另一方面,如果numbers是一个成员变量,当它作为成员的对象被销毁时就会被销毁。