[英]Heap error in for loop using const type variable?
對於練習,使用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變量?
您的代碼看起來很好 - 確保您使用相同的編譯器(並使用相同的Debug / Release配置)編譯Qt的dll文件。
回答你的一些問題:
是因為它是const類型而我的for循環每次嘗試覆蓋const變量?
不,你的for循環不是試圖覆蓋const變量。 const變量位於assingment運算符的右側,因此你的for循環是從const變量讀取的 ,並且它不會覆蓋任何東西(你a
變量是局部變量,在循環塊中可見,所以a
在每次傳遞中都是不同的循環)。
即使您嘗試覆蓋const變量,也不會編譯 - 嘗試更改const將在編譯時中斷,而不是在運行時中斷。
你最好不要將字符串轉換為std::string
並使用std::cout
,而是使用QTextStream
進行輸出:
QTextStream out(stdout); //... QString filena=list[i].fileName(); out << filena << endl;
我的錢是將Qt Framework的Debug版本與已編譯程序的Release版本混合。
特別是在Windows下,在調試和發布版本中使用了不同的堆管理器。
嘗試在調試模式下重新編譯,看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.