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

marfi

Treue Seele

  • »marfi« ist der Autor dieses Themas

Beiträge: 100

Wohnort: Schwerte

  • Private Nachricht senden

1

05.09.2011, 21:13

Speicherleck anzeigen

Hallo,

irgendwie funktioniert die Speicherleck suche bei mir nicht. Ich benutze VS 2010 und Win 7. Dazu habe ich Visual leak detector installiert. Nachdem ich die vld.h inkludiert habe, wird mir nur im Outputfenster angezeigt, dass ich vld vers. 2.2 installiert habe.

Mehr nicht :/ Im Debugmodus bin ich eigentlich, aber vielleicht passt eine Einstellung von mir nicht. Ich bin mir nicht sicher, woruaf vld achtet.

Dann habe ich es mit Bordmitteln versucht. Dabei wird der dump ausgegeben und auch Speicherlecks angezeigt. ABer trotz der definition von new wird nicht angezeigt, in welcher Datei/line das leck auftritt.

Vielleicht bin ich auch gerade zu Müde :) Aber irgendwie wurmt mich das ganze Geschehen. Vielleicht weiß jemand Rat!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#ifdef DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) 
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

05.09.2011, 21:26

Ähhh.... in welcher Datei/Line das Leck auftritt?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Rushh0ur

Frischling

Beiträge: 67

Beruf: Student Elektrotechnik

  • Private Nachricht senden

3

05.09.2011, 23:22

Ist nicht möglich. Funktioniert doch, siehe post drunter.

Wie dann, dann müsste jede new und delete Operation überschrieben werden und mit dem Datei- und Zeilenparameter versehen werden und das macht keiner der Methoden, es wird lediglich der Heap beim beenden geprüft und was noch reserviert ist ausgegeben.
Vorkompilierte Bibliotheken müssten ja dann diese Angaben auch beinhalten.

Mfg Rushh0ur

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rushh0ur« (06.09.2011, 04:13)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

06.09.2011, 00:26

VLD macht aber genau das. Man kann sogar mit einem Doppelklick zu der Zeile springen, wo die Allokation gemacht wurde.

Habe VLD gerade selbst in 2 Minuten selbst installiert und funktioniert wunderbar.
- Download des Installers
- Durch Install Menü durchklicken
- VS 2010 öffnen
- Include Pfad und Lib Pfad einstellen
- vld.lib mitlinken

Testen:

C-/C++-Quelltext

1
2
3
4
5
6
#include "vld.h"

int main()
{
    new int;
}


Ausgabe:

Zitat

Visual Leak Detector Version 2.2 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00081498: 4 bytes ----------
Call Stack:
c:\...\main.cpp (5): konsole.exe!main + 0x7 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (555): konsole.exe!__tmainCRTStartup + 0x19 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (371): konsole.exe!mainCRTStartup
0x762E339A (File and line number not available): kernel32.dll!BaseThreadInitThunk + 0x12 bytes
0x77E19ED2 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x63 bytes
0x77E19EA5 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x36 bytes
Data:
CD CD CD CD ........ ........


Visual Leak Detector detected 1 memory leak (40 bytes).
Largest number used: 40 bytes.
Total allocations: 40 bytes.
Visual Leak Detector is now exiting.
The program '[2844] konsole.exe: Native' has exited with code 0 (0x0).


Doppelklick auf die erste Zeile des Call Stack und ich war an der richtigen Stelle.

marfi

Treue Seele

  • »marfi« ist der Autor dieses Themas

Beiträge: 100

Wohnort: Schwerte

  • Private Nachricht senden

5

06.09.2011, 19:23

Ich habe jetzt mal ein neues Projekt erstellt und vld benutzt. Was soll ich sagen ... funktioniert einwandfrei :)

Ich habe wahrscheinlich in dem besagten Projekt eine falsche Debugeinstellung o.ä. und vld erkennt nicht das es eine debug version ist.

Jetzt werde ich die Einstellungen mal durchgehen. VLD habe ich schon öfter mal benutzt und hatte nie Probleme. Wer weis was ich da vermurkst habe ;)

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

6

06.09.2011, 19:40

VLD scheint ja ein interessantes Plugin zu sein. Lohnt sich die Verwendung oder funktioniert VLD in größeren Projekten mit komplexeren Strukturen nicht mehr zuverlässig?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

06.09.2011, 19:48

VLD ist kein Plugin, sondern eine Bibliothek.
Ich denke mal solange man selbst an den Speicherallokatoren nichts rumschraubt oder fragwürdige Konstrukte benutzt sollte das gut funktionieren. Möglicherweise muss man allerdings darauf achten, dass es mit weiteren Bibliotheken zu Problemen kommen könnte, falls die erstgenanntes tun.

marfi

Treue Seele

  • »marfi« ist der Autor dieses Themas

Beiträge: 100

Wohnort: Schwerte

  • Private Nachricht senden

8

06.09.2011, 19:58

VLD gibt bei mir "falsche" Speicherlecks aus, wenn man Speicher reserviert und eine eigene release Funktion hat. Oder wenn man nicht den gleichen Namen freigibt sondern nur die Adresse.

Werbeanzeige