[c++] [wxWindows] wxWindows debug alert

Eva

Mitglied
Hallo Leute,

ich habe einen sehr komischen Fehler mit Microsoft Visual Studio 6 - C++ und wxWindows (wxWidget).

Bekomme erst mal folgende Fehlermeldung: "E:\....\....cpp: "m_seriesListCtrl != NULL" failed. Do you want to stop the program? You can also choose [Cancel] to suppress further warnings. "
an folgender Codestelle:

Code:
wxControl *control;
	control = GetControlByName (wxString(wxGetTranslation("SeriesInfo")));
        wxASSERT (control != NULL);
Also mein Element ist NULL.

Jedoch kommt ist diese Fehlermeldung erst seit kurzem in meinem Program aufgetreten und ich hab das genauer unter die Lupe genommen: wenn ich Teile einer Klasse auskommentiere, die ebenfalls Objekte von wxWindows intialisieren, kommt diese Fehlermeldung NICHT. Wenn ich die Codestuecke auskommentiere, dann funktionert es wieder. Das Codestueck, dass das Problem bereitet schauen so aus: (wobei die Klasse, wo der Fehler auftaucht und die Klasse, wo ich das Codestueck auskommentiere nichts miteinander zu tun haben)

Code:
void Histogram::CreateBitmapButtons () 
{
	sw::GraphBitmapButton* bitmapButtonFactory = new sw::GraphBitmapButton (); 
	wxBitmap* bitmap = bitmapButtonFactory->CreateLogBitmapButton (m_iconWidth, m_iconHeight);
	wxBitmapButton* m_bitmapLogButton = new wxBitmapButton (m_panel, LOGBUTTONID, *bitmap, wxPoint (30, 10));
	m_bitmapLogButton->SetBitmapLabel (*bitmap);
	m_bitmapLogButton->SetBitmapFocus (*bitmap);
	m_bitmapLogButton->SetBitmapSelected (*bitmap);
	delete bitmap;
	bitmap = bitmapButtonFactory->CreateLinBitmapButton (m_iconWidth, m_iconHeight);
	wxBitmapButton* m_bitmapLinButton = new wxBitmapButton (m_panel, LINBUTTONID, *bitmap, wxPoint (60,  10));
	m_bitmapLinButton->SetBitmapLabel (*bitmap);
	m_bitmapLinButton->SetBitmapFocus (*bitmap);
	m_bitmapLinButton->SetBitmapSelected (*bitmap);
	delete bitmap;
	bitmap = bitmapButtonFactory->CreateDisabledBitmapButton (m_iconWidth, m_iconHeight); 
	m_bitmapLinButton->SetBitmapDisabled (*bitmap);
	m_bitmapLogButton->SetBitmapDisabled (*bitmap);
	delete bitmap; 
} // CreateBitmapButtons

Weiss jemand, ob es vielleicht irgendwie eine Grenze gibt von wxWindows. Ich weiss zwar jetzt nicht direkt von was, aber vielleicht erlaubt wxWindows bei der Initalisierung etwas nicht.

Danke fuer eure Hilfe,

Eva
 
Hallo, *freu*, endlich mal einer, der auch wxWidgets benutzt. :p
Die Fehlermeldung ist nicht eine komische Fehlermeldung, sondern eine ganz normale. :) Sie stammt von dem wxASSERT() und sagt eben, dass die Erzeugung des wxControl nicht geklappt hat.

Du verwendest GetControlByName(). Ist das eine selbstgeschriebene Funktion?
Die Syntax
Code:
GetControlByName(wxString(wxGetTranslation("SeriesInfo")));
könntest du auch kürzer schreiben:
Code:
GetControlByName(_("SeriesInfo"));

Grüße
Onkel Schuppig
 
Ja, das ist eine selbstgeschriebene Funktion und sollte auch so bleiben.

Und ja, ich moechte wissen, warum ich der Fehler mal kommt und mal nicht? Mit ist klar, das es ein wxWindows Debug Alert Fehler ist, aber warum kommt er, wenn ich Teile vom Code lasse und ist dann aber nicht mehr da, wenn ich Teile vom Code auskommentiere, die eigentlich mit dieser Klasse rein gar nichts zu tun haben!!
 
Ich kann ihn mal posten, aber ich glaub, das hilft nicht viel weiter....

Code:
wxControl *VolumeImport::GetControlByName (wxString &parameterName)
{
    ControlIDParameterMap::iterator it;

    it = m_parameterMap.find (parameterName);
    if (it != m_parameterMap.end ()) {

        wxWindow *window = m_dialog->GetWindow ()->FindWindowById (it->second.first);
        wxASSERT (window != NULL);

        wxControl *control = wxDynamicCast(window, wxControl);
        wxASSERT (control != NULL);

        return control;
    }

    wxFAIL_MSG ("No parameter with this name");
    return NULL;
}
 
Hmm, die ganz zu Anfang gezeigte "E:\....\....cpp: "m_seriesListCtrl != NULL" Meldung sehe ich hier noch nicht. In GetControlByName() könnte ein Absturz erfolgen, wenn m_dialog->GetWindow() Null liefert.

Habe schon viel mit wxWindgets gemacht, bin bisher aber noch nicht auf Begrenzungen gestossen. Du müsstest den Fehler durch Debuggen im Einzelschritt-Modus finden. Bei wxWidgets kannst du ja sogar in den Quellcode der wxWidgets-Funktionen springen.
 
Zuletzt bearbeitet:
Zurück