zoukankan      html  css  js  c++  java
  • 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());

    这样就可以正常运行了!

  • 相关阅读:
    C#:将空间数据加载到树视图控件
    C# 常见错误
    C#:Application操作(待补充)
    C#:XML操作(简单)
    C#:xml操作(待补充)
    C#:消息框
    C#:数学运算(待补充)
    C#:Ini文件操作(待补充)
    C#:文件操作(待补充)
    2015河南省农村拆迁赔偿流程
  • 原文地址:https://www.cnblogs.com/start530/p/3834381.html
Copyright © 2011-2022 走看看