struct pointer
-
...ist ja schon gut.
Woher soll ich denn wissen, dass es einen no_code gibt?
Wollte damit nur zum Ausdruck bringen, dass es um pointer geht.
-
Window* mainwindow = new Window(); mainwindow.init = new WindowInit(); mainwindow->init.application = new Application();versuch doch mal sowas an den anfang deiner main zu schreiben und dann natürlich auch die delete orgie am ende
delete mainwindow->init.application; delete mainwindow.init; delete mainwindow;
-
falls dir das wie mir nicht gefällt mach die sternchen in z.11/24 raus dann brauchst nur ein
Window* mainwindow = new Window(); delete mainwindow;dann müssen aber auch bis auf die ersten alle -> durch . ersetzt werden
mainwindow->init.application.className = _T("OpenGL"); ...
-
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.