memory leak?oder doch nicht?

Gast #1941474
Lesenswert?

moin,
ich hab eigentlich ne ganz kurze Frage:
Wenn ich in C++ mit
1
int *ptr1, *ptr2;
2
ptr1 = new int[10];
3
ptr2 = new int[10];
dynamisch zwei arrays erstelle und anschließend per
1
delete[] ptr1, ptr2;
wieder lösche, wird doch wirklich der speicher beider arrays wieder 
freigegeben, oder?
Valgrind meldet dann nämlich immer das der speicher von ptr2 nicht 
freigegeben wurde..

die einfachste methode das zu umgehen ist natürlich einfach
1
delete[] ptr1;
2
delete[] ptr2;
zu schreiben, allerdings wurde im gesamtem Projekt das ich bearbeite mit 
einer delete[] anweisung der speicher mehrerer arrays wider frei gegeben 
und das umzuschreiben, nur weil valgrind das nicht erkennt wäre ja 
zuviel des guten...
Persönliche Seite #1941557
Lesenswert?

Flutsch1987 schrieb:
> dynamisch zwei arrays erstelle und anschließend perdelete[] ptr1, ptr2;
> wieder lösche, wird doch wirklich der speicher beider arrays wieder
> freigegeben, oder?

Nein, das geschieht nicht, wie schon "Web-Applikator" sehr richtig 
erkannt hat.

Diesen Programmierfehler musst Du in Deinem kompletten Quelltext 
beseitigen.

Suche nach Zeilen, in denen das Wort "delete" und ein Komma auftaucht.
Gast #1941611
Lesenswert?

hm,
das ist natürlich ärgerlich...das einzig gute daran ist das wenigstens 
nicht nur ich solch blöde fehler mach :) (projekt ist nicht von mir 
geschrieben)

vielen dank für die schnelle Hilfe.
Gast #1941651
Lesenswert?

Die GCC warnt übrigens bei solchen Konstrukten.

test.c:3: warning: right-hand operand of comma has no effect

bzw

test.c:3: Warnung: right-hand operand of comma hat keinen Effekt

;)

==> Projekt mit -Wall -Werror kompilieren. Wenn das erstmal klappt, 
wieder zum valgrind zurück.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren