PDA

Visualizza la versione completa : [C++] wxWindows: Segmentation Fault con wxTextCtrl


Delas
26-08-2005, 19:17
ciao a tutti.
ho un problema: derivo da un wxFrame una finestrella:

class addVoloFrame: public wxFrame{
public:
...
wxTextCtrl* addOraPartOre, *addOraPartMin, *addOraPartSec;
...
}
nel costruttore del frame, inizializzo la wxTextCtrl:

addVoloFrame::addVoloFrame(const wxString& title,
myApp* appPrinc, mainFrame* framePrinc)
: wxFrame((wxFrame *)NULL, -1, title, wxDefaultPosition,
wxSize(420,550), wxMINIMIZE_BOX)
{
...
addCodice=new wxTextCtrl(this, -1);
...
}appena cerco di istanziare un oggetto di addVoloFrame (ovvero cerco di aprire la finestra) ho un Segmentation Fault.
avete qualche idea? io ci sto diventando pazzo!
:dh˛:

Delas
26-08-2005, 19:22
dimenticavo:
gcc 3.3.5
wx 2.4.2

anx721
26-08-2005, 21:51
posta un po piu di codice ...chi Ŕ addCodice?

cerca di individuare la riga precisa che causa l'errore mettendo delle istruzioni di stampa.

Delas
27-08-2005, 13:55
ciao, intanto grazie per l'interessamento: ne ho davvero bisogno (progetto per sessione di esame di settembre)...
allora, questa Ŕ tutta la classe del frame:

class addVoloFrame: public wxFrame{
public:
//costruttore
addVoloFrame(const wxString&, myApp*, mainFrame*);


//oggetti logici
char addFreq[7];

myApp* puntApplicazione;

mainFrame* finestraPrincipale;



//oggetti fisici
wxFlexGridSizer* sizer;
wxTextCtrl *addCodice, *addCompagnia, *addProvenienza, *addDestinazione;
//ora partenza ed arrivo

wxTextCtrl* addOraPartOre, *addOraPartMin, *addOraPartSec;

wxTextCtrl* addOraArrOre, *addOraArrMin, *addOraArrSec;
//data inizio e fine validita
wxCalendarCtrl* addDataInizio;
wxCalendarCtrl* addDataFine;
//frequenza

wxCheckBox* addLun, *addMar, *addMer, *addGio, *addVen, *addSab, *addDom;
//pulsante che aggiunge

wxButton* bottoneAggiungi;

//metodi per eventi
void OnAggiungi(wxCommandEvent&);
...

private:

DECLARE_EVENT_TABLE()
};
e questo Ŕ il relativo costruttore:

addVoloFrame::addVoloFrame(const wxString& title, myApp* appPrinc, mainFrame* framePrinc)
: wxFrame((wxFrame *)NULL, -1, title, wxDefaultPosition, wxSize(420,550), wxMINIMIZE_BOX),
puntApplicazione(appPrinc), finestraPrincipale(framePrinc)
{


for (int l=0; l<7; l++) addFreq[l]='-';
wxStaticBox* boxOpzioni = new wxStaticBox(this, -1, "Aggiunta nuovo volo:");
wxStaticBoxSizer* sizerOpzioni = new wxStaticBoxSizer(boxOpzioni, wxVERTICAL);
sizer = new wxFlexGridSizer(2, 5, 5);
wxFlexGridSizer* feqSizer = new wxFlexGridSizer(2, 1, 1);
//ATTENZIONE:
//appena decommento anche solo una di queste righe, va in segmentation fault
/*addCodice=new wxTextCtrl(this, -1);

addCompagnia=new wxTextCtrl(this, -1);

addProvenienza=new wxTextCtrl(this, -1);

addDestinazione=new wxTextCtrl(this, -1);*/
addDataInizio = new wxCalendarCtrl(this, -1, wxDefaultDateTime,
wxDefaultPosition, wxDefaultSize, wxCAL_MONDAY_FIRST);
addDataFine = new wxCalendarCtrl(this, -1, wxDefaultDateTime,
wxDefaultPosition, wxDefaultSize, wxCAL_MONDAY_FIRST);
addLun = new wxCheckBox(this, ID_checkLun, "Lunedý"); feqSizer->Add(addLun);
addMar = new wxCheckBox(this, ID_checkMar, "Martedý"); feqSizer->Add(addMar);
...

//aggiungo gli elementi al sizer
sizer->Add(new wxStaticText(this, -1, "Codice nuovo volo:"));
...

SetSizer(sizerOpzioni);

}
questo oggetto viene istanziato da un metodo di mainFrame (classe con la finestra principale):

void mainFrame::OnAddVolo(wxCommandEvent& WXUNUSED(event)){
addVoloFrame* inserimentovolo = new addVoloFrame(
wxT("Progetto Programmazione 2 - Aggiunta volo"),
puntApplicazione,
this);

inserimentovolo->Show();
}
grazie ancora!

anx721
27-08-2005, 15:01
Cosi non riesco a riprodurre l'errore, dovresti postare tutti i file del programma, o magari il minimo necessario per avere un'applicazione compilabile ed eseguibile che produce l'errore.

Delas
27-08-2005, 15:09
vedi pm

Loading