在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中
in Qt error shows : "Fault Module Name: Qt5Cored.dll" in win 7 and when debugging : "segmentation fault" in centos linux and win 7
我使用QtDesigner创建了两个对话框"listdialog.ui"answers"editdialog.uy"与Qt5.3.1,然后添加到项目"电话簿.pro"与源代码"使用男巫每次我用所有需要的dll启动我编译的电话簿.exe时,当我尝试要在QtCreator中(或单独)启动程序,需要运行时一些问题细节的错误,上面写着:
问题事件名称:APPCRASH
故障模块名称:Qt5Cored.dll
其他使用GUI的程序运行良好(早期编译的.exe文件)。此外,当调试(在win7中)(并在centos6.4中运行)时,它会显示一个消息框:-
下位机因为收到操作系统的信号而停止。
信号名称:SIGSEGV
信号含义:分段故障
文件代码为:-
文件-1:Editdialog.cpp:-
#include <QDialog>
#include "ui_EditDialog.h"
class EditDialog : public QDialog, public Ui::EditDialog
{
public :
EditDialog (QWidget *parent=0 );
const QString name() const;
void setName( const QString& );
const QString number() const;
void setNumber( const QString& );
private :
EditDialog *ui;
};
文件-2:listdialog.h
#ifndef LISTDIALOG_H
#define LISTDIALOG_H
#include <QDialog>
#include "ui_ListDialog.h"
class ListDialog : public QDialog, public Ui::ListDialog
{
Q_OBJECT
public :
//ListDialog(QObject *parent = 0);
ListDialog(QWidget *parent = 0);
//I don't know when to write "QWidget *parent=0" and when "QObject *parent=0)
private slots :
void addItem();
void editItem();
void deleteItem();
private :
ListDialog *ui;
};
#endif //LISTDIALOG_H
文件-3:ListDialog.cpp
#include "ListDialog.h"
#include "EditDialog.h"
ListDialog::ListDialog(QWidget *parent) : QDialog(parent), ui(new ListDialog)
{
ui->setupUi(this);
connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addItem()) );
connect(ui->editButton, SIGNAL(clicked()), this, SLOT(editItem()) );
connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteItem()) );
}
void ListDialog::addItem()
{
//EditDialog *dlg = EditDialog(this);
EditDialog dlg(this);
if(QDialog::Accepted == dlg.exec())
ui->listDialogWidget->addItem(dlg.name() + " -- " + dlg.number());
}
void ListDialog::deleteItem()
{
delete ui->listDialogWidget->currentItem();
}
void ListDialog::editItem()
{
if(!ui->listDialogWidget->currentItem())
return;
QStringList parts = ui->listDialogWidget->currentItem()->text().split("--");
EditDialog dlg(this);
dlg.setName(parts[0].trimmed());
dlg.setNumber(parts[1].trimmed());
if(dlg.exec() == QDialog::Accepted)
ui->listDialogWidget->currentItem()->setText(dlg.name() + " -- " + dlg.number());
}
文件-4:EditDialog.cpp
#include "EditDialog.h"
EditDialog :: EditDialog(QWidget *parent) : QDialog(parent)
{
ui->setupUi(this);
}
const QString EditDialog::name() const
{
return ui->nameLineEdit->text().replace("--","").trimmed();
}
void EditDialog::setName(const QString &name)
{
ui->nameLineEdit->setText(name);
}
const QString EditDialog::number() const
{
return ui->numberLineEdit->text().replace("--","").trimmed();
}
void EditDialog::setNumber(const QString &number)
{
ui->numberLineEdit->setText(number);
}
和它们一起,这个项目有:-"ui_editdialog.h"answers"ui_listdialog.h"由QtDesigner生成。
文件-5:main.cpp
#include "EditDialog.h"
#include "ListDialog.h"
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QObject parent;
QWidget parent;
/*
ListDialog *listdlg = new ListDialog;
listdlg->show();
*/
ListDialog dlg(&parent);
dlg.show();
return a.exec();
}
请任何人告诉我——如何克服这个问题。我搜索了一些网站这是指针设置为null或内存访问外部的问题它的领域。我认为它可能是构造函数设置的*parent=0(文件-2:listdialog.h-ListDialog(QWidget*parent=0);)但是如何克服,我不知道。
@PeterT非常感谢你给我一条路。我更改了构造函数的代码,正如您所说的"ListDialog::ListDialog(QWidget*parent):QDialog(parent),ui(new ui::List对话框)"answers"EditDialog::EditDialog(QWidget*parent):QDialog(parent),ui(new ui::Edit对话框)"程序现在运行良好。非常感谢。
- 当回溯以零开始时,如何调试崩溃
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 使用vscode调试时,GDB意外退出
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 即使使用调试编译标志,表达式也是"optimized out"
- 调试 CUDA MMU 故障
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 小字符串优化(调试与发布模式)
- 调试和自由执行中的信号处理
- 调试编译的服务器在数据库打开时崩溃
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中
- 在代码中调试我的C++项目时"Program received signal SIGSEGV, Segmentation fault. In ?? () ()":块