QT中野指针问题。

13 篇文章 4 订阅

 

错误提示:

Signal received

 The inferior stopped because it received a signal from the Operating System.

 Signal name : SIGSEGV

 Signal meaning : Segmentation fault

这个错误说明程序中有野指针,断点以下很容易找出错误。

代码分析:

widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    InitPort();
    InitTcp();
    ui->SendBtn->setEnabled(false);

}

//初始化
void Widget::InitPort()
{
    mySerial = new QSerialPort(this);
    foreach (const QSerialPortInfo&info,QSerialPortInfo::availablePorts())
    {

        QSerialPort serial;
        serial.setPort(info);
        if(serial.open(QIODevice::ReadWrite))
        {
        ui->ComBC->addItem(info.portName());
        serial.close();
        }
    }
    QStringList baudList;//波特率
    baudList<<"115200"<<"57600"<<"38400"<<"19200"<<"9600"<< "4800"<<"2400"<<"1200";
    ui->BaudCB->addItems(baudList);
    QStringList dataBitsList;
    dataBitsList<<"8"<<"7"<<"6"<<"5";
    ui->DataBitsCB->addItems(dataBitsList);
    QStringList parityList;
    parityList<<"无校验"<<"奇校验"<<"偶校验";
    ui->ParityCB->addItems(parityList);
    QStringList stopBitsList;
    stopBitsList<<"1"<<"1.5"<<"2";
    ui->StopCB->addItems(stopBitsList);
    QStringList setFlowCtrl;
    setFlowCtrl<<"off"<<"RTS/CTS"<<"XON/XOFF";
    ui->FlowsCB->addItems(setFlowCtrl);
    //ui->SendBtn->setEnabled(false);
}
//配着上面的错误信息看哦,代码比较多,贴出来的是出现上面问题的代码,错误根源再int ret= mySerial->write(ch);

void Widget::doProcessWrite()
{

    if(!tempStr.isEmpty())
    {
        //qDebug()<<"向串口写入数据正确";
        char *ch=tempStr.data();
    int ret= mySerial->write(ch);

       if(ret<0)
       {
           return;
       }
    }
    else{
         //qDebug()<<"向串口写入数据错误";
        return;
    }
    QString str=QString::fromLocal8Bit(tempStr);
    QString strReplace= str.replace(QString("\r\n"),QString(""));
    if(!strReplace.isEmpty())
    {
    ui->textEdit_Client->append(strReplace);
    qDebug()<<strReplace;
    }
    else {
         return;
    }
    tempStr.clear();
}

原因:开始的时候是在某个槽函数中mySerial = new QSerialPort(this)分配空间的,如果这个槽函数没有执行就不会分配空间;所以就会出现野指针情况,对于这种情况应该检查指针是否new个空间,所以最好在初始化的时候就要为指针申请空间。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值