2011-03-04 50 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。可能不是你想要做的。