Keystone Visual C++ : Seit wann müssen Pointer gelöscht werden ?
-
Hey Unix-Tom,
*pS wird wirklich nicht mit new dynamisch erstellt, dass einzige was ich gefunden habe, was dynamisch erstellt wird, is das hier :
CStudent *p = new CStudent( dlg.m_strName,dlg.m_strFaculty, dlg.m_nGrade );Allerdings wird ein Pointer namens *p erzeugt und nicht *pS !
Mehr gibt es nicht in dem Projekt...
Peace21
-
Was wird dann mit p gemacht?

Namen kann man doch ändern.

-
Dein Denkfehler ist, dass du glaubst, dass ein Pointer gelöscht werden muss. Das ist aber nicht der Fall, gelöscht wird ein Objekt, das mit new erstellt wurde (und dessen Adresse einem Pointer zugewiesen wird). In deinem Beispiel zeigt wohl zuerst p auf eins dieser Objekte, dann wird seine Adresse (= der Wert von p) in eine Liste eingetragen. Später wird die Liste elementweise gelöscht, dabei wird in jedem Knoten die Adresse des entsprechenden Objektes an pS zugewiesen und dort gelöscht.
-
Das sind offensichtlich gravierende Schwächen in den Grundlagen.
Geh bitte nochmal das Kapitel über Pointer (Zeiger) in deinem Buch durch.
Sonst wird es dir hier vielleicht ein C++-Profi erklären.
Hat nichts mit MFC oder VC++ zu tun.
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi,
@ Baschar
Nein, ich habe das ganze Projekt abgesucht und keine Zeile gefunden wo pS der Adresse des Pointers p zugewiesen wird.Für alle (wie Estartu ;)) die gerne mal in das Projekt schauen möchten, falls
sie mir nicht glauben (oder ich etwas übersehen habe) ....Download:
http://www.k2theb.ag.vu/sreg.zipHoffe ihr könnt mir meinen Denkfehler/Sehfehler erklären

Peace21
-
Dann schau doch mal bitte in die Datei "sregDoc.cpp" da steht
m_StudentList.AddHead(p);der Zeiger "p" wird übergeben. Vorher wird mit new ein Objekt erzeugt und mit der obigen Zeile in die Liste eingefügt, also muss das erzeugte Objekt auch wieder per delete freigegeben werden. Wie der Zeiger auf das Objekt heißt ist völlig egal. Wenn Dir das jetzt immer noch nicht klar ist, dann nimm bitte Unix-Toms's Rat an und lies Dir noch ein paar Mal das Kapitel über Pointer durch.
-
Mach dir vor allem klar was der Unterschied zwischen einem Objekt und einem Pointer ist...
-
finix schrieb:
Mach dir vor allem klar was der Unterschied zwischen einem Objekt und einem Pointer ist...
Genau das werde ich jetzt machen, denn das ist irgendwie das verwirrenste an dieser Sache...
Danke für all eure Hilfe.
Peace21
-
Ein zeiger ist einfach eine Adresse, die man auf NULL setzt, wenn damit kein Blödsinn getrieben werden soll, denn dann kann man vorher auf (Pointer == NULL) testen. Ein Objekt wird durch den Konstruktor erzeugt und durch den Destruktor vernichtet. Die Daten des Objekts sind allerdings noch da, daher biegt man die Pointer zur Sicherheit auf NULL um. Man reisst also die Wegweiser auf das Geisterhaus "Totes Objekt" aus der Erde, damit keiner das Haus betritt, bevor ein neuer Mieter einzieht.