Qt中出现段错误的原因分析

这里只说我在写程序时遇到段错误的原因,如何解决的
总之,涉及到指针的,你不能在未定义,未初始化,未 “new” 之前使用,否则等待你的肯定是 segment fault,然后程序直接退出

1. 类A在执行中可能会几次用到用到类B,也可能只有一次用到,也可能一次都不用,这种情况下我的习惯就是在类A的构造函数中初始化B类对象为NULL,然后在用的地方先判断B是否实例化,未实例化,实例化,然后使用,delete B类对象时也要先判断下B是否实例化
    因为这里已经初始化了类B的对象,使用时容易出的错误是在判断是否实例化时,如果在判断类本身是否实例化之前,判断了(或者说使用了)类B的成员函数/成员变量,出现段错误,因为这个类不存在,其成员函数/变量也不存在

举个我用qt做播放器的例子,其中调用到mplayer播放器:

发生错误的时候,我在mainwindow.h 里 有定义了个widget,用于将视频播放的位置固定在这个widget上。

private:

          QWidget *widget;

然后在mainwindow.cpp里,我调用这个窗口:

QString common = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + " -wid " + QString::number(widget->winId());


程序运行后果然提示段错误!

后来了发现是在调用widget的时候未初始化,即要在之前:

widget = new QWidget(this);

QString common = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + " -wid " + QString::number(widget->winId());

这样就可以正常运行了!

原文地址:https://www.cnblogs.com/start530/p/3834381.html