使用lambda函数与数组的内存错误

时间:2016-11-29 03:58:29

标签: c++ lambda

const int bookBoatNum = 10;
Wt::WPushButton *buttonBookBoat[bookBoatNum];
Wt::WDialog *dialogBookBoat[bookBoatNum];

for (int i = 1; i < bookBoatNum; i++){
    dialogBookBoat[i] = new Wt::WDialog("Book Boat");
    buttonBookBoat[i] = new Wt::WPushButton();

    buttonBookBoat[i]->clicked().connect(std::bind([&dialogBookBoat,i]() {
        dialogBookBoat[i]->show();
    }));
}

程序编译并运行。当我单击一个WPushButton对象时,由于内存错误,它因第三行而崩溃。如果buttonBookBoat和dialogBookBoat是单个对象而不是对象数组,则此代码可以正常工作。 show()是一个显示对话框对象的方法。

任何帮助都表示赞赏,这个错误一直让我发疯,我的生活与这段代码一致(不是真的)。

1 个答案:

答案 0 :(得分:0)

const int bookBoatNum = 10;
Wt::WPushButton *buttonBookBoat[bookBoatNum];
Wt::WDialog *dialogBookBoat[bookBoatNum];

for (int i = 1; i < bookBoatNum; i++){
    dialogBookBoat[i] = new Wt::WDialog("Book Boat");
    Wt::WDialog * tempDialog=new Wt::WPushButton();
    buttonBookBoat[i] = tempDialog;

    buttonBookBoat[i]->clicked().connect(std::bind([tempDialog]() {
        tempDialog->show();
    }));
}

我认为dialogBookBoat是一个数组,因此在函数调用后它将不存在。