簡體   English   中英

使用const類型變量的for循環中的堆錯誤?

[英]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將在編譯時中斷,而不是在運行時中斷。

  1. 這段代碼適合我。
  2. 你最好不要將字符串轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM