struct pointer
-
Grundsätzlich musst du Zeiger initialisieren. Aber so wie no_code würd ichs nicht machen. Wenn du den Speicher jedes Mal im Anwendercode derart verschachtelt anfordern und wieder umgekehrt freigeben musst, hat das keine Zukunft.

Falls du C programmierst, schreib dir Create- und Destroy-Funktionen, welche die ganze Initialisierungs- und Aufräumarbeit abnehmen (das schliesst korrekt initialisierte Member ein):
Window* CreateWindow(/* Parameter hier */); void DestroyWindow(Window* window);Für C++: Kapsle das Ganze mit Klassen, die sich selbst verwalten und für genügend Speicher sorgen. Das hat Zukunft!

-
willst mich ärgern

-
Ich habs am Anfang natürlich nur mit
new Window;probiert und window->init etc. ganz vergessen.
Jetzt funktioniert zwar fast alles, aber ich bekomme es irgendiwe nicht hin ein Fenster Handle und einen Device Kontext zu erstellen.
Zwar geben CreateWindowEx und GetDC true zurück, aber mein Programm schließt direkt wieder und im Debugger steht folgendes:
http://yfrog.com/hqhdcpAnsonsten kann ich jetzt alles korrekt initialisieren und löschen.
Mit den Klassen realisiere ich das ganze dann, wenn erstmal die grundlegen Dinge laufen
-
Ist mehr ein WinAPI-Problem. Kann einer der Moderatoren den Thread verschieben?
-
Hallo,
ich muss den Thread nochmal ausgraben
Es funktioniert zwar jetzt alles wenn ich Debugge, aber wenn ich für Release kompiliere kommt immer eine Zugriffsverletzung, wenn ich das Programm schließe.
Diese Zeile löst sie aus:delete mainwindow;Und da ich gelernt habe, das zu jedem new ein delete gehört verwundert mich das ganze jezzt, wieso das nicht klappt. Soll ich das delete einfach weg lassen oder wie?
-
Sieht so aus, als würdest du mehrmals
deleteaufrufen. Prüfe noch mal, ob dumainwindownicht doch vorher schon freigibst.
-
Hab den Quellcode mal aus free und delete abgesucht, und ich gebe mainwindow nur einmal frei.
-
Alternativ: du setzt
mainwindowzwischendurch auf einen entweder schon freigegebenen Pointer oder einen nie angeforderten. Also schememhaft:int* a = new int; int* mainwindow = new int; //... mainwindow = a; // Speicherleck, aber erstmal unwichtig //... delete a; //... delete maindow; // Autsch, obwohl nur einmal freigegeben
-
Ich habe genau nur ein new und ein delete in meinem Code und sowas wie mainwindow = xyz ist auch nicht dabei.
-
Also ein mainwindow->x.y.z = 10 habe ich schon drin. Vor dem delete habe ich auch mal Zero Memory ausprobiert. Doch beim schließen wird immer der Haltepunkt ausgelöst, wie wenn man F12 drückt während das Programm läuft.
-
Hier kann dir so aber niemand wirklich helfen. Zeig Code oder bastel am besten ein Beispiel, wo dieser Fehler auch auftritt.