|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 26.07.2003, 10:08 Titel: _CrtDumpMemoryLeaks |
|
|
Ich habe es endlich hinbekommen, die Memory-Leaks anzuzeigen, aber was bringt mir das? :
Code: |
Detected memory leaks!
Dumping objects ->
{59} normal block at 0x00C218E0, 32 bytes long.
Data: < <V > 04 3C 56 00 01 00 00 00 00 DD 14 00 00 00 00 00
{58} normal block at 0x00C21930, 176 bytes long.
Data: < > 01 00 00 00 00 DD 14 00 00 00 00 00 E0 18 C2 00
{57} normal block at 0x00C21A10, 80 bytes long.
Data: < ;V * > D8 3B 56 00 01 00 00 00 2A 15 0A 92 20 00 00 00
Object dump complete.
|
Woher weiß ich denn jetzt, woich Speicher nicht freigegeben habe? |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 26.07.2003, 15:33 Titel: |
|
|
Schaue per Debugmodus nach, wo du den Speicher zuweist (per new oder malloc), der die unter _CrtDumpMemoryLeaks aufgelisteten adressen enthält und überlege, warum der Speicher nicht wieder freigegeben wird.
PS.: Die Adressen können sich mit jedem Programmdurchlauf ändern, also eine alte Anzeige nützt in der Regel wenig... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 26.07.2003, 16:06 Titel: |
|
|
Wenn du die Werte hast (57,58,59 usw.) kannst du bei nächsten Programmstart im Code oder im Debugger _crtBreakAlloc = 57; verwenden. Alternativ kannst du _CrtSetBreakAlloc(57); aufrufen.
Dann sollte der Debugger an der Stelle stehen bleiben, an der du Speicher reserviert hast, der nicht wieder freigegeben wurde. Natürlich darfst du am Code nichts ändern.
Christian |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 26.07.2003, 23:30 Titel: |
|
|
Wenn die Speicherallokierung von Benutzereingaben abhängig ist, wenn mehrere Thread's gleichzeitig speicher allokieren könnten oder wenn ein Timer für zeitversetzte Speicherallokierung zuständig ist, sind die Angaben in der Regel nicht mehr Vergleichbar.
Es wird sicherlich noch 1000 andere Gründe geben, warum ein Speicher nicht in der selben reihnfolge allokiert wird, wie ein Programmlauf zuvor - und das ohne Veränderungen am Code.
Aber wenn man sicher sein kann, dass die Reihnfolge immer gleich ist, ist dieser Weg natürlich zu empfehlen. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|