2011-03-04 51 views
0

我的QDialog在關閉後導致seg故障。我在使用它之前malloc我的結構,設置是PSETTINGS類型並且是一個私有變量。QDialog exec()(SEG FAULT)

MainWindow類:(SEG斷層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); 
} 

謝謝:)

+0

好的。我是新來的,所以我還不太瞭解這個標準。謝謝。 – Koralarts 2011-03-04 16:38:01

+0

不客氣。 – 2011-03-04 22:53:33

回答

1

malloc也造成了問題。該結構中的字符串可以在不被構建的情況下使用。假設你的堆在那之後損壞了。

相反的malloc嘗試...

settings = new SETTINGS(); 

...當然,當你用它做刪除。

0

你是在棧上分配QButtonGroup serviceGroup。可能不是你想要做的。