gpt4 book ai didi

c++ - Qlist 在 QList 析构函数中导致访问冲突

转载 作者:行者123 更新时间:2023-11-30 05:26:51 41 4
gpt4 key购买 nike

我正在使用 Qt5 用 C++ 编写一个视频抓取应用程序。我正在关注他们的示例代码并查看获取相机信息的文档: http://doc.qt.io/qt-5/qcamerainfo.html

我遇到的问题是,在我使用规定的技术获取相机数据后(效果很好):

QList<QCameraInfo>cameraInfos = QCameraInfo::availableCameras();

我得到一个 Access violation每当 cameraInfos 时出错超出范围。

例如,如果我这样做:

void readDeviceInfo(void) {

// Camera devices:
QList<QCameraInfo>cameraInfos = QCameraInfo::availableCameras()
for (QList<QCameraInfo>::Iterator it = cameraInfos.begin();
it != cameraInfos.end(); ++it)
std::cout << it->description().toStdString().c_str() << std::endl;


}

崩溃发生在该函数返回时。如果我这样做:

foreach(const QCameraInfo &ci, QCameraInfo::availableCameras());

崩溃发生在 foreach 循环的评估中。同样,如果我声明 QList<QCameraInfo> cameraInfos作为类中的一个字段,崩溃发生在类被销毁时。我的调用堆栈的输出验证了这一点:

    ntdll.dll!000000007750eef1()    Unknown
kernel32.dll!00000000773c1a0a() Unknown
> VideoCapture.exe!free(void * pBlock) Line 51 C
VideoCapture.exe!QCameraInfo::`scalar deleting destructor'(unsigned int) C++
VideoCapture.exe!QList<QCameraInfo>::node_destruct(QList<QCameraInfo>::Node * from, QList<QCameraInfo>::Node * to) Line 484 C++
VideoCapture.exe!QList<QCameraInfo>::dealloc(QListData::Data * data) Line 857 C++
VideoCapture.exe!QList<QCameraInfo>::~QList<QCameraInfo>() Line 817 C++

我正在使用 Visual Studio 2013(显然是 Windows)。

最佳答案

您需要自己编译 Qt,然后在调试器下运行您的测试用例并查看它崩溃的地方。您还需要一个最小的、独立的测试用例 - 这必须是问题的一部分 ( SSCCE )。实际上,您更有可能在其他地方损坏内存,而您看到的失败是堆损坏的结果,而不是 Qt 错误。

侧边栏:你需要熟练地在Qt Creator中运行小例子。可以说,Qt Creator 附带的模板对此不是很好。你可以use this template ,可作为其他项目->简单的 qmake,制作快速原型(prototype)。

在 OS X 10.9 和 Windows 10/VS 2015 上,当前 Qt 上的 1 个摄像头对我来说效果很好。您使用的 std::cout 是红鲱鱼,您可以使用qDebug() 也是如此。

// https://github.com/KubaO/stackoverflown/tree/master/questions/camlist-37603946
#include <QtWidgets>
#include <QtMultimedia>

int main(int argc, char ** argv) {
QApplication app{argc, argv};
QComboBox combo;
QObject::connect(&combo, &QComboBox::currentTextChanged, [&]{
std::cout << combo.currentText().toStdString() << std::endl;
});
for (auto const & info : QCameraInfo::availableCameras())
combo.addItem(info.description());
combo.show();
return app.exec();
}

关于c++ - Qlist<QCameraInfo> 在 QList 析构函数中导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603946/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com