Qt中出现段错误的原因分析
這里只說我在寫程序時遇到段錯誤的原因,如何解決的
總之,涉及到指針的,你不能在未定義,未初始化,未 “new” 之前使用,否則等待你的肯定是 segment fault,然后程序直接退出
1. 類A在執(zhí)行中可能會幾次用到用到類B,也可能只有一次用到,也可能一次都不用,這種情況下我的習(xí)慣就是在類A的構(gòu)造函數(shù)中初始化B類對象為NULL,然后在用的地方先判斷B是否實例化,未實例化,實例化,然后使用,delete B類對象時也要先判斷下B是否實例化
因為這里已經(jīng)初始化了類B的對象,使用時容易出的錯誤是在判斷是否實例化時,如果在判斷類本身是否實例化之前,判斷了(或者說使用了)類B的成員函數(shù)/成員變量,出現(xiàn)段錯誤,因為這個類不存在,其成員函數(shù)/變量也不存在
舉個我用qt做播放器的例子,其中調(diào)用到mplayer播放器:
發(fā)生錯誤的時候,我在mainwindow.h 里 有定義了個widget,用于將視頻播放的位置固定在這個widget上。
private:
QWidget
*widget;
然后在mainwindow.cpp里,我調(diào)用這個窗口:
QString
common =
"mplayer
-slave -quiet
-ac
mad -zoom
movie/"
+ file_name
+ "
-wid
" +
QString::number(widget->winId());
程序運行后果然提示段錯誤!
后來了發(fā)現(xiàn)是在調(diào)用widget的時候未初始化,即要在之前:
widget =
new
QWidget(this);
QString
common =
"mplayer
-slave -quiet
-ac
mad -zoom
movie/"
+ file_name
+ "
-wid
" +
QString::number(widget->winId());
這樣就可以正常運行了!
總結(jié)
以上是生活随笔為你收集整理的Qt中出现段错误的原因分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android入门(10)| Fragm
- 下一篇: 类的概念、成员函数的定义方式、类的访问控