3

練習のために、QTライブラリを使用して、フォルダーを選択し、そのフォルダー内のdicomファイルの名前をリストしようとしています。そのためのコードは次のとおりです。

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


    QApplication app(argc, argv);
    QString fileName = QFileDialog::getExistingDirectory();


    if (fileName.isEmpty())
    {
        std::cout << "Got an empty file!\n";
    }
    else
    {
        QStringList nameFilter;
        QDir dir(fileName);
        nameFilter << "*.dcm";
        QFileInfoList list = dir.entryInfoList( nameFilter, QDir::Files );
        int numberOfFiles=list.count();

        for(int i=0;i<numberOfFiles;i++)
        {
            QString filena=list[i].fileName();
            string a=filena.toStdString();
            cout<<a<<endl;

        }
    }
   return 0;
}

toStdStringここで、実際std::string QString::toStdString () constには である関数 が Heap エラーを与えることがわかりました。このエラーを取り除く代わりに を使用することはわかっていtoLocal8Bit().constData()ますが、toStdString によって提供されるヒープ エラーの背後にある主な理由は何なのか知りたいです。それはconst型であり、for ループが毎回 const 変数を上書きしようとしているからですか?

4

3 に答える 3

0

私のお金は、Qt フレームワークのデバッグ バージョンと、コンパイルされたプログラムのリリース バージョンを混在させることになります。

特に Windows では、デバッグ ビルドとリリース ビルドで異なるヒープ マネージャーが使用されます。

デバッグ モードで再コンパイルして、何が起こるかを確認してください。

于 2013-05-03T13:37:19.167 に答える