QDialog exec () (SEG FAULT) - PullRequest
       15

QDialog exec () (SEG FAULT)

0 голосов
/ 04 марта 2011

Мой QDialog вызывает ошибку сегмента после его закрытия.Я использую структуру malloc перед ее использованием, настройки имеют тип PSETTINGS и являются частной переменной.

Класс MainWindow: (ошибка сегмента происходит в 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);
}

Спасибо:)

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Маллок тоже вызывает проблемы.Строки в этой структуре используются без конструирования.Предположим, что ваша куча повреждена после этой точки.

Вместо malloc попробуйте ...

settings = new SETTINGS();

... и, конечно, удалите, когда закончите с этим.

0 голосов
/ 05 марта 2011

Вы размещаете группу обслуживания QButtonGroup в стеке. Наверное, не то, что вы хотите сделать.

...