私のコンピュータに接続されているWebカメラの名前をつかみ、コンボボックスに押し込んで後で名前にアクセスしようとしています。私のコードは次のとおりです。camerainfoとcombobox.currentText()でメモリに問題があります
#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();
}
このコードは、コンピュータに接続したWebカメラの名前を持つコンボボックスを作成して表示します。コンボボックスの文字列をコンソールに出力しようとすると、アクセス違反の例外が表示されます。
私がcoutの行をコメントアウトすると、すべて正常ですが、終了時にデバッグアサーションが失敗します!メッセージ:
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を使用しています。
コンパイラのバージョンにQtバイナリを使用していますか? Visual Studioの他のバージョン用に構築されたバイナリには、CRT +標準ライブラリの互換性が1つ以上ないため、UB /ヒープの破損が発生します。 – drescherjm
そうだと思います。 Qt5Multimedia.dllがターゲットのフォルダにあります。 x64。 – dmedine
おそらく私はソースからビルドする必要があります。私はsourceforgeからダウンロードしました。私はおそらく正しいバージョンを持っていると思う。私がチェックします。あなたが言うことは、私が経験している行動と一致しています。 – dmedine