[英]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.