memory leak?oder doch nicht?

Gast #1941474
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...
Gast
delete[] ptr1, ptr2;

Löscht ptr1, und wertet nachher die Addresse von ptr2 aus, nur um sie 
wieder zu verwerfen (wird wegoptimiert).

=> Im C-Buch den Komma (,)-Operator nachlesen.
Persönliche Seite
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
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.