stack probleme
-
Hallo zusammen,
habe ein merkwürdiges Problem. Habe eine Anwendung SDI erzeugt. Auf der Bildschirmoberfläche habe ich mehrere CStatic und CEdit Felder erzeugt. Diese waren als Member der Fensterklasse erzeugt.
class CAnsicht : public CWnd { DECLARE_DYNAMIC(CAnsicht) .... CStatic stc1, stc2, stc3, stc4, ... stcXXX;Die Felder werden in einer Funktion über Create erzeugt. Beispiel:
stc1.Create(_T("Feld 1:"),WS_CHILD | WS_VISIBLE, CRect(xpos,ypos,xpos+xlength,ypos+ylength),this,IDC_STC_111);xpos und ypos sind Positionen auf dem Bildschirm.
Nun wollte ich heute einen weiteren Dialog hinzufügen. Jedoch meldet mir das erzeugte Programm beim Beenden eine Fehlermeldung
"....hat ein Problem festgestellt und muss beendet werden."
Besonderer Knackpunkt: Der Dialog wird richtig dargestellt, soblad ich einen anderen aus der Liste da oben raus nehme.
Deshalb war meine Vermutung: Speicherproblem.
Also den neuen Dialog auf dem Heap anlegen:CStatic stc1, stc2, stc3, stc4, ... stcXXX, *stcNeu;Im Konstruktor des Hauptfensters Speicher bereitstellen und im Destruktor wieder löschen.
Und nun klappt es. Kann es dein wirklich ein Speicherproblem sein? Auf dem Hauptfenster habe ich 20 Cstatics, 20 CEdits und 1 Bild. Da ich neu in der GUI - Programmierung bin, würde es mich interessieren ob jemand von euch auch mal solch eine Erfahrung gemacht hat. Ich meine dass kann doch nicht sein, dass mit solchen mikrigen Controls der Speicher schon überlastet ist oder?
Vielen Dank für eure Antworten.
-
Benutze den Debugger und lass Dir zeigen wo es kracht. Schau Dir den Call-Stack an und sieh wer wenn in diesem Moment aufruft.
BTW: Warum erzeugst Du diese ganzen COntrols dynamisch und verwendest kein Dialog-Template?
-
Hallo Martin,
was genau ist ein Template und was ist der Vorteil? Vielleicht kannst du mir ein gutes Tutorial empfehlen?
-
Ich bin kein Typ für Tutorials. IMHO müsste jedes C++ Buch dieses Thema behandeln. Aber wenn Du jetzt nicht weißt was ein Template ist, wird es Dir keine Lösung sein...