2011-03-04 2 views
0

내 QDialog가 닫힌 후 seg fault가 발생합니다. 내 구조체를 사용하기 전에 malloc, 설정은 PSETTINGS 유형이며 개인 변수입니다.QDialog exec() (SEG FAULT)

MainWindow를 클래스 : 헤더 파일에서

:는

Settings *settingsDiag = new Settings(this); 

settingsDiag->exec(); 

설정 클래스 (원세그 오류는 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

+0

당신은 오신 것을 환영합니다. –

답변

1

malloc도 문제를 일으키고 있습니다. 해당 구조체의 문자열은 생성되지 않고 사용됩니다. 그 시점 이후에 힙이 손상되었다고 가정하십시오. 대신 시도의 malloc의

...

settings = new SETTINGS(); 

... 그리고 당신이 그것으로 완료하면 당연히 삭제합니다.

0

당신은 스택에 QButtonGroup serviceGroup를 할당한다. 아마 네가하고 싶은게 아니야.

관련 문제