Visual Leak Detector

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Visual Leak Detector

Beitrag von mathies »

Hi,

ich möchte dieses Tool nutzen um Memory Leaks aufzuspüren. Klappt mit dem finden scheinbar soweit auch ganz gut, nur die Informationen kann ich nicht wirklich interpretieren. Wo kann ich daraus ersehen was nun genau für den Leak verantwortlich ist? Schon das erzeugen von neuen Objekten, die über die gesamte laufzeit des Programms genutzt werden, wird als solches dargestellt...???
Gibt es dazu irgendwo eine Hilfe oder kann mir jemand so weiterhelfen?

Ein Beispiel:

Code: Alles auswählen

void myClass::addData( typ data )

...

// Element im Vektor suchen
for( unsigned int i=0; i<vec.size(); i++ )
{
    if( vec[i]==id )
    {
        vec[i] = data;

        // raus, da fertig
        return;
    }
}

// element noch nicht gefunden, also hinzufügen
vec.push_back( data );
Warum ist die push_back() Funktion ein Memory Leak? Diese funktion wird mehrere tausend mal aufgerufen, geht aber nur einmal zum push back, daher wird das bestehende statische Element ja nur überschrieben.

Ich habe einen Speicherfresser der mich pro Sekunde ca. 20kb kostet, und das ist alles was mir das Tool liefert... :(
Ginsengelf
Beiträge: 79
Registriert: 2. Mai 2007 10:21

Beitrag von Ginsengelf »

Moin, ich bin mir nicht sicher, wie intelligent der VLD ist, aber du könntest versuchen, im Destruktor von myClass den Vektor wieder leer zu räumen, vielleicht hilft das.

Ginsengelf
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

VLD macht nicht mehr als VisualStudio selbst kann. Und das ist nicht viel. Wenn Du wirklichwas testen willst dann würde ich was komerzielles Empfehlen --> Compuware DevPartner.
D.h. das Leak was er meint muss nicht unbedingt ein Leak sein.
Aus deinem Code kann man aber auch nicht sehen was wirklich passiert - z.B. was 'typ' ist und wie der Copy-ctor dort implementiert ist.
Ein vector an der Stelle sieht mir auch suboptimal aus. Besser wäre da wohl ne map
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten