qq内存问题与camerainfo和combobox.currentText()

时间:2016-06-29 19:28:30

标签: c++ qt memory combobox

我正在尝试抓住插入计算机的网络摄像头的名称并将其推入组合框,然后再访问该名称。这是我的代码:

#include <QApplication>
#include <QComboBox>
#include <QCameraInfo>
#include <iostream>

int main(int argc, char *argv[])
{


    QApplication app{ argc, argv };
    QComboBox combo;
    QList<QCameraInfo> info = QCameraInfo::availableCameras();

    foreach(QCameraInfo i, info)
        combo.addItem(i.description());
    combo.show();

    std::cout << combo.currentText().toStdString() << std::endl;
    return app.exec();


}

代码创建并显示一个组合框,其中包含我已插入计算机的网络摄像头的名称。然后,在尝试将组合框字符串打印到控制台时,它会抛出一个访问冲突异常。

如果我评论cout行,一切都很好,但退出时我得到一个Debug Assertion失败!消息:

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

我的意思是我删除一个已删除的对象(组合框中的QString ???)。

如果我更改代码以用假人填充组合框:

#include <QApplication>
#include <QComboBox>
#include <QCameraInfo>
#include <iostream>

int main(int argc, char *argv[])
{


    QApplication app{ argc, argv };

    for(int i=0; i<2; i++)
        combo.addItem(QString("la la la");
    combo.show();

    std::cout << combo.currentText().toStdString() << std::endl;
    return app.exec();


}

我在cout上得到了同样的错误,但如果我注释掉该行,则应用程序正确退出。我使用的是Visual Studio 2013,Windows 7和Qt5。

1 个答案:

答案 0 :(得分:0)

现在它有效。我保留了相同的源代码,但完全取消了现有项目并从头开始新的项目。

我发现如果我将Runtime Library标志设置为Multi-Threaded DLL Debug,我将收到访问冲突错误。如果我将它设置为Multi-Threaded DLL,那很好。

可能还有一些其他项目设置有所贡献,但这似乎是罪魁祸首。