繁体   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