Для практической работы с использованием библиотеки QT я пытаюсь выбрать папку и указать имя файлов dicom в этой папке. Ниже приводится код, который:Ошибка кучи в цикле с использованием переменной типа const?
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 каждый раз?
Нет причин для получения «ошибки кучи» с этим кодом (что я вижу). Как проявляется эта «ошибка кучи»? – trojanfoe
Ну а окно появляется, говоря 'Debug Assertion Не удалось! Программа: Programname.exe Файл: ..somepathlink \ dbgheap.c Line: 1322 Expression: _CrtIsValidHeapPointer (pUserData) ' –