在使用 Qt 创建者创建一个非常简单的项目时遇到 Qt 中的“分段错误”

Posted

技术标签:

【中文标题】在使用 Qt 创建者创建一个非常简单的项目时遇到 Qt 中的“分段错误”【英文标题】:getting stuck with "segmentation fault" in Qt while using Qt creator to create a very simple project 【发布时间】:2015-04-29 09:33:25 【问题描述】:

这是我的源代码,超级简单:

#include<QApplication>
#include<QLabel>
int main(int argc,char* argv[])

   QApplication app(argc,argv);
   QLabel *label=new QLabel("Hello world");
   label->show();
   return app.exec();

当我建造它时,一切都很好。但是当我尝试运行它时,它立即停止,告诉我“*.exe 已经停止。关闭它或调试它。”。

所以我尝试调试它。过了一会儿,它抛出一条消息:

The inferior stopped because it received a signal from the operating system

 SINAL NAME: SIGSEGV
 SIGNAL MEANING: segmentation default

我在谷歌、*** 和***上查了很多资料。很多人说是指针使用不当造成的。但我找不到问题出在哪里。请帮忙。

顺便说一下,我用的是win7,我在qt 4.8.5和qt 5.4.0上试过。 编译器和调试器都很好(至少 qt 创建者没有显示错误)。

我应该重新安装 Qt 还是其他?

这是错误的代码(在 qatomic_i386.h 中)调试器为我指出:

inline bool QBasicAtomicInt::deref()

        unsigned char ret;
    asm volatile("lock\n"
                 "decl %0\n"
                 "setne %1"
                 : "=m" (_q_value), "=qm" (ret)
                 : "m" (_q_value)

                 : "memory");   //this is the wrong code the debugger point out for me

 return ret != 0;

qstring.h中的另一行:

inline QString::~QString()  if (!d->ref.deref()) free(d); 

这都是错误的信息。谢谢。

**********************代码改变***但是一样******

#include<QApplication>
#include<QLabel>
#include<QDialog>

int main(int argc,char* argv[])

    QApplication app(argc,argv);
    QDialog* dialog=new QDialog;
    QLabel* label=new QLabel(dialog);
    label->setText("Hello world");
    dialog->show();
    //label->show();    it's the same with or without this

    return app.exec();

***********更多变化但相同*********

#include<QApplication>
#include<QLabel>
#include<QDialog>

int main(int argc,char* argv[])

    QApplication app(argc,argv);
    QDialog dialog;
    QLabel label(&dialog);
    label.setText("Hello world");
    dialog.show();
    //label->show();

    return app.exec();

【问题讨论】:

我认为您需要一个父主窗口来显示您的标签,请查看文档:doc.qt.io/qt-5/qlabel.html#QLabel @Joachim Pileborg 我更改了代码。见上文。 @danielfranca 我更改了代码。见上文。 @JoachimPileborg QLabel 是一个和其他小部件一样的小部件。这样的程序做的不多,但它完全有效,应该可以毫无问题地运行(我测试过,至少在 Qt 4.8.4 上是这样)。 只显示没有窗口的 QLabel 应该可以工作,您确定您没有使用与用于编译 Qt 的编译器不同的编译器来编译您的应用程序吗? 【参考方案1】:

请检查您的 .pro 文件,您没有尝试使用控制台应用程序,您必须使用 qwidet 应用程序。:

#-------------------------------------------------
#
# Project created by QtCreator 2015-05-04T11:12:27
#
#-------------------------------------------------

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets


TARGET = testapp


TEMPLATE = app


SOURCES += main.cpp

应用程序对我来说很好用你的代码,,,,它运行一个 procces_stub.exe cmd 然后它在窗口上显示标签...

【讨论】:

以上是关于在使用 Qt 创建者创建一个非常简单的项目时遇到 Qt 中的“分段错误”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt 标头的递归包含时出错 [重复]

Qt 创建器中的白色窗口

如何使用 Qt/C++ 创建/读取/写入文件并使用程序在本地存储设置

使用 libsodium 构建一个简单的项目 [重复]

编辑器中的 Qt 创建者 CPU 使用率高

Qt 史上最详细 - “操作XML文件” - 笔记