2017-10-26 16 views
0

Hallo mein Valgrind zeigt mir Speicherfehler, aber ich kann es nicht finden.C Valgrind Speicherverlust

== == 18608 HEAP ZUSAMMENFASSUNG:

== == 18608 im Einsatz bei der Ausfahrt: 88 Bytes in Blöcken 1

== == 18608 Gesamt Heap-Verbrauch: 4 Allocs, 3 befreit, 2.220 Bytes

== == 18608

== == 18608 Suche nach Zeigern auf 1 nicht befreite Blöcke

== 186 zugewiesen 08 == Auf 53.708 Bytes

== 18608 ==

== 18608 == 88 Bytes in 1-Blöcke werden auf jeden Fall zu einem Verlust Rekord 1 von 1

== 18608 == bei 0x402D17C verloren: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)

== == 18608 von 0x8 0485BF: pmalloc (in auf)

== == 18608 von 0x8048680: main (in auf)

== ==

== 18608 == LEAK ZUSAMMENFASSUNG:

== 18608 == definitiv verloren: 88 Bytes in 1 Blöcke

== 18608 == indirekt verloren: 0 bytes in 0 Blöcke

== 18608 == möglicherweise verloren: 0 Bytes in 0 Blöcke

== 18608 == noch erreichbar: 0 Bytes in 0 Blöcke

== 18608 == unterdrückt: 0 Bytes in Blöcken 0

== == 18608

== == ERROR 18608 Zusammenfassung: 1 Fehler 1 Kontexten (unterdrückt: 0 0)

== 18608 = = FEHLER ZUSAMMENFASSUNG: 1 Fehler von 1 Kontexten (unterdrückt: 0 von 0)

+2

Könnten Sie bitte Fügen Sie Ihren Code hier ein, anstatt ihn als Bild anzuzeigen? – frslm

+1

Der Rückgabewert von 'pmalloc' muss gespeichert werden. und benutze dann 'frei'. – BLUEPIXY

+0

danke für die Antwort aber wie speichere ich den zurückgegebenen Wert, den ich nicht verstehe –

Antwort

1

Sie vergeben zwei verschiedene int * s; Sie befreien die erste Ressource nicht aber die zweite befreien, ohne damit etwas zu tun:

print_prim(pmalloc(n), laenge); 
free(pmalloc(laenge)); 

Um richtig die erste Ressource frei, würden Sie so etwas tun:

int *p = pmalloc(n); 
print_prim(p, laenge); 
free(p); 
Verwandte Themen