Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

03.04.2008, 18:31

Zitat von »"drakon"«

if (var == NULL) ist das gleiche, wie if(!var)


das stimmt nur bedingt...

Zitat von »"Pyro Phoenix"«

Ich finde die printf Syntax auch wesentlich schöner. Ich meine auch irgendwo mal gelesen zu haben, das man printf dem ganzen cout Sachen vorziehen sollte.


interessant.
printf und seine Kollgegen sind im Gegensatz zu C++ streams nicht typsicher.

Zitat von »"David_pb"«

Echt? Half Life nutzte noch Sprites?


Sprites sind keine veraltete Technik oder sowas.
So ziemlich jedes ernsthafte 3D Game nutzt in irgendeiner Form Sprites (wenngleich die Sprites von heute auch nichts mehr mit den 2D Pixelbildchen der 80er zu tun haben)...

Zitat von »"Pyro Phoenix"«

In etwa so ?


C-/C++-Quelltext

1
mainData->header = new struct hed_key;


In C++ brauchst du nicht immer struct etc. vor den Typ schreiben.

C-/C++-Quelltext

1
mainData->header = new hed_key;


genügt vollkommen. auch ohne typedef ;)

diesen ganzen new haufen find ich irgendwie unschön, vor allem seh ich keine dazu passenden deletes...

könnte man das nicht vielleicht noch etwas schöner in klassen kapseln!?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

03.04.2008, 18:43

Ich bezog mich mit Sprites auf die 2 Dimensionalen Pixelbildchen der 80er. Der Rest steht schon weiter oben.
@D13_Dreinig

13

03.04.2008, 20:20

// Hier stand Müll

14

06.04.2008, 18:07

Zitat von »"dot"«


diesen ganzen new haufen find ich irgendwie unschön, vor allem seh ich keine dazu passenden deletes...


Die sind im Destruktor untergebracht. Aber irgendwie hab ich trozdem das gefühl, das ich Speicher-Leaks verursache. Kann ich das irgendwie überprüfen ?

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

15

06.04.2008, 18:09

mit debugger durch, und am ende (vor dem exit / dem letzten return) alle variablen überprüfen...

16

06.04.2008, 18:42

OK DONE. Scheint so, als ob alles korrekt freigegeben wird.

Wo ist eigentlich der Unterschied zwischen 'delete' und 'delete[]' ?

Ich weiß, das es irgendwas mit Arrays zu tun hat. bzw der initialisierung.

AFAIK erfordert '**' ein 'delete [][]'. Wenn ich aber ein '*' mit einem einfachen 'delete' lösche bekomme ich keine fehlermeldung. Hat das irgendwelche Nachteile ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

06.04.2008, 18:44

Zitat von »"Pyro Phoenix"«

Zitat von »"dot"«


diesen ganzen new haufen find ich irgendwie unschön, vor allem seh ich keine dazu passenden deletes...


Die sind im Destruktor untergebracht. Aber irgendwie hab ich trozdem das gefühl, das ich Speicher-Leaks verursache. Kann ich das irgendwie überprüfen ?


Schreib dir einen Memory Manager der die Speicher anforderungen und Freigaben protokoliert. Dann weißt du genau ob Speicherlecks vorhanden sind und wo diese Enstanden.

Zitat von »"Pyro Phoenix"«

OK DONE. Scheint so, als ob alles korrekt freigegeben wird.

Wo ist eigentlich der Unterschied zwischen 'delete' und 'delete[]' ?

Ich weiß, das es irgendwas mit Arrays zu tun hat. bzw der initialisierung.

AFAIK erfordert '**' ein 'delete [][]'. Wenn ich aber ein '*' mit einem einfachen 'delete' lösche bekomme ich keine fehlermeldung. Hat das irgendwelche Nachteile ?


Der Operator delete[] löscht ein Zeiger auf ein Array von reservierten Elementen. Bei einen Zeiger auf einen Zeiger (**) musst du vorher alle Elemente durchlaufen und mit delete/delete[] löschen und dann per delete[] das Zeigerarray selbst.
@D13_Dreinig

18

06.04.2008, 18:47

Zitat von »"David_pb"«

Zitat von »"Pyro Phoenix"«

Zitat von »"dot"«


diesen ganzen new haufen find ich irgendwie unschön, vor allem seh ich keine dazu passenden deletes...


Die sind im Destruktor untergebracht. Aber irgendwie hab ich trozdem das gefühl, das ich Speicher-Leaks verursache. Kann ich das irgendwie überprüfen ?


Schreib dir einen Memory Manager der die Speicher anforderungen und Freigaben protokoliert. Dann weißt du genau ob Speicherlecks vorhanden sind und wo diese Enstanden.


Klingt nach ner menge Arbeit ... ;)
Meinst du ich krig das hin ? Ich hatte bisher nur das Buch von Heiko K. als fundamentale Grundlage.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

06.04.2008, 18:49

Veruchen kannst dus. Im Grund musst du nur die globalen Funktionen operator new und operator delete überschreiben.
@D13_Dreinig

20

06.04.2008, 18:50

Ich bin mir nicht mehr sicher, aber ich habe mal gehört, das vor einem Array im Speicher noch Zusatzinformationen stehen, die delete[] dann benutzt um das gesamte Array zu löschen.
Daher muss man Arrays immer mit delete[] freigeben und normale Objekte immer mit delete.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige