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());

这样就可以正常运行了!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
段错误(Segmentation fault)通常是由于访问了无效的内存地址或者内存越界导致的。在你的描述,你提到了在点击屏幕时发生段错误,可能与输入事件处理有关。 以下是一些可能导致段错误的常见原因和解决方法: 1. 内存越界:请确保你的程序在处理输入事件时没有访问超出数组边界或者无效的指针。检查你的代码,尤其是与输入事件处理相关的部分,确保没有越界访问内存。 2. 空指针引用:检查你的代码是否存在对空指针的引用。在访问指针之前,始终确保指针不为空。 3. 对象生命周期管理:如果你在处理输入事件时使用了某个对象,确保该对象在使用之前已经正确地创建和初始化,并且在使用完毕后进行了正确的释放。 4. Qt框架问题:如果你的程序使用了Qt框架,并且段错误发生在Qt相关的代码,可能是由于Qt框架本身的问题引起的。尝试更新到最新的Qt版本,或者查找是否有已知的Qt框架相关的问题和解决方案。 5. 调试工具:使用调试工具(如gdb)来分析段错误原因。通过在程序崩溃时获取堆栈跟踪信息,可以确定导致段错误的具体位置,从而更好地定位和解决问题。 请注意,以上是一些常见的原因和解决方法,具体情况可能因为你的程序和硬件环境的不同而有所差异。如果问题仍然存在,你可能需要进一步调查和分析以确定导致段错误原因

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值