【问题标题】:How I can fix this error? terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc我该如何解决这个错误?在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc
【发布时间】:2015-01-15 21:56:54
【问题描述】:

这是代码: 功能:

QString printDir2(QString path, int level)
{
int check =1;
QDir folder(path);

QString space;
QString buffer;
qDebug() <<"nivelul 1 \n";
for(int i=0; 1<level; i++)
    space +="    ";
qDebug() <<"nivelul 2 \n";
foreach(QFileInfo temp , folder.entryInfoList())
{
    if(check > 2)
    {
        qDebug() <<"nivelul 4 \n";
        buffer += space + temp.absoluteFilePath() + "\n";
        if(temp.isDir())
            buffer += printDir2(temp.absoluteFilePath(), ++level);
    }
    check++;
    qDebug() <<"nivelul 3 \n";
}
return buffer;

}

我在这里调用函数:

QString drum="/home/sunny/Desktop/QT/descarca";
        str=printDir2(drum,0);
        qDebug()<<str<<"acesta este drumul";

如何从终端修复此错误:
在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc 这是我运行代码时的终端:http://s013.radikal.ru/i325/1501/e5/aade9346f0aa.png

【问题讨论】:

  • std::bad_alloc 在没有足够可用内存时抛出。您可以通过让计算机拥有更多内存或更改程序以减少内存需求来解决此问题。
  • 我有足够的内存,我尝试进行调试,发现在第 4 次递归后他抛出了这个错误!我认为错误在于我调用函数的方法。
  • 异常究竟是从哪里(哪一行)抛出的?
  • 你可能有足够的内存。但是如果你的应用是 32 位的,你在分配上就有限制。

标签: c++ qt


【解决方案1】:

你可能遇到了无限递归。

在调试器中运行您的程序。如果你使用 gdb,你可以在run 之前发出命令catch throw。然后调试器将在抛出异常时停止。您可能需要移动 up 几次才能查看代码中的哪一行引发了异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2020-11-03
    • 2021-01-14
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多