当前位置:   article > 正文

terminate called after throwing an instance of ‘stdbad_alloc‘问题原因与解决

terminate called after throwing an instance of

terminate called after throwing an instance of 'std::bad_alloc’问题原因与解决

当做一个QT程序调试如下部分代码时,我想将此处部分代码简化,一开始我是用ui界面读取文件并打印出来,为了查看格式是否正确,所以有了如下代码(可以正常运行).

//--------mainwindow.cpp-----------
//一条一条进行读取
    QByteArray buf=serial->readAll ();
    if(!buf.isEmpty ())
    {
        ui->textEdit->clear ();
        ui->textEdit->moveCursor (QTextCursor::End);
        ui->textEdit->insertPlainText (buf.toHex ());
    }
//获取数据
    QString str=ui->textEdit->toPlainText ();
    qDebug()<<str;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

当我不需要从ui界面输出时,我想修改掉此处代码,于是我进行了如下修改:

//--------mainwindow.cpp-----------
//一条一条进行读取
    QByteArray buf=serial->readAll ();
	QString str;
    if(!buf.isEmpty ())
    {
        str.toHex();
    }
	qDebug()<<str;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行上述代码,会导致出现错误程序不能运行:

terminate called after throwing an instance of ‘std::bad_alloc’

在我搜索了网上出错原因后,我发现此处的原因可能是因为重复声明QString str导致内存不够所造成的,于是我修改代码如下:

//--------mainwiondw.h------------
//声明为全局变量
	QString str;
//--------mainwindow.cpp-----------
//一条一条进行读取
    QByteArray buf=serial->readAll ();
    if(!buf.isEmpty ())
    {
        str.toHex();
    }
	qDebug()<<str;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

正常运行,over!

总结:此类报错的原因多为内存不够导致程序异常终止,所以可以检查一下自己声明的某一部分是否导致了内存不够.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/939570
推荐阅读
  

闽ICP备14008679号