【问题标题】:QDialog exec() (SEG FAULT)QDialog exec() (SEG FAULT)
【发布时间】:2011-03-04 05:09:31
【问题描述】:

我的 QDialog 在关闭后导致了段错误。我在使用它之前 malloc 我的结构,设置是 PSETTINGS 类型并且是一个私有变量。

MainWindow 类:(Seg Fault 发生在settingsDiag->exec()

Settings *settingsDiag = new Settings(this);

settingsDiag->exec();

设置类:

在头文件中:

typedef struct ConnSettings {
    ConnSettings():ipAddr(""), alias("Local"), port(8000), isClient(false){}
    QString ipAddr;
    QString alias;
    int port;
    bool isClient;
} SETTINGS, *PSETTINGS;

在 CPP 文件中:

Settings::Settings(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Settings)
{
    ui->setupUi(this);

    QButtonGroup serviceGroup(ui->serviceBox);
    QValidator *validPort = new QRegExpValidator(QRegExp("^\\d*$"), this);
    QValidator *validIp = new QRegExpValidator(QRegExp("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"), this);

    serviceGroup.addButton(ui->clientButton);
    serviceGroup.addButton(ui->serverButton);

    connect(ui->okCancel, SIGNAL(accepted()), this, SLOT(storeSettings()));
    connect(ui->clientButton, SIGNAL(toggled(bool)), this, SLOT(enableDisableClient(bool)));

    ui->portText->setValidator(validPort);
    ui->ipText->setValidator(validIp);
}

Settings::~Settings() {
    delete ui;
}

void Settings::storeSettings() {
    settings = (PSETTINGS)malloc(sizeof(SETTINGS));
    settings->port = ui->portText->text().toInt();

    if((settings->isClient = ui->clientButton->isChecked())) {
        settings->ipAddr = ui->ipText->text();
        settings->alias = ui->aliasText->text();
    }
}

PSETTINGS Settings::getSettings() {
    return settings;
}

void Settings::enableDisableClient(bool client) {
    ui->clientBox->setEnabled(client);
}

谢谢:)

【问题讨论】:

  • 好的。我是新手,所以我还不知道标准。谢谢。

标签: qt segmentation-fault


【解决方案1】:

malloc 也引起了问题。该结构中的字符串无需构造即可使用。假设您的堆在此之后已损坏。

而不是 malloc 尝试...

settings = new SETTINGS();

...当然,当你完成它时删除它。

【讨论】:

    【解决方案2】:

    您正在堆栈上分配 QButtonGroup serviceGroup。可能不是你想做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多