出现这个错误,在网上搜索了复制过来:
这个错误多半是因为一个变量定义好后还没有被初始化,在内存中还没有分配空间,就被拿来使用了
或者一些多线程里或者文件.h定义先后顺序的问题,检查变量被使用前是否已经初始化和分配空间
在用QT5做串口实验的时候,自作聪明的用一个做QSerialPort对象指针做成员,代码如下:
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_comboBox_2_currentIndexChanged(const QString &arg1); void on_SendButton_clicked(); private: Ui::MainWindow *ui; QSerialPort *serial; void initSerialPort(); void serialRead(); };
这本也没什么,QSerialPort *serial; 只是一个指针
QSerialPort serial; 才是一个类对象
如果用QSerialPort *serial;,那就应该动态创建一个对象,或者让这个serial指针指向已有的对象,才能使用serial。
但是并没有那么做,而是直接用serial指针操作,完全忘了申请一个对象了。结果就报了这么错。
在网上搜了搜,看见有段回答,还不明白,先复制下来,慢慢体会:
一般在如下情况把成员定义成指针:
1)有多态的情况;会用到虚函数
2)可能和别的类共享,或者只是引用别的类里的某个对象,所以生命周期不是很确定(考虑智能指针)
3)大数据,如果定义成对象,会导致当前对象无法在栈内创建