2010-10-25 3 views
5

Ich bin ziemlich neu in C++, habe aber einige grundlegende C-Kenntnisse. In meinen letzten C (Universitäts-) Projekten habe ich Valgrind benutzt, um nach Memleaks zu suchen.Valgrind in C++ Entwicklung verwendet?

Jetzt, mit C++, ist Valgrind ein gültiges Tool? Hat C++ die gleichen Probleme bezüglich Memleaks wie C? Oder gibt es noch bessere Tools in Verbindung mit C++?

Antwort

8

Ich verwende nie new und delete (oder andere Formen der manuellen Speicherverwaltung) und ich verwende sehr selten sogar Zeiger. Und ich immer noch müssen mit Speicherlecks mit ungültigen Speicherzugriffen wrestlen. Valgrind ist ein unverzichtbares Werkzeug für mich. Noch wichtiger als gdb.


Wie Viktor in einem Kommentar darauf hingewiesen, Speicherlecks ohne manuelle Speicherverwaltung produzieren würde ziemlich komisch sein (zirkuläre Referenzen und andere Sonderfälle Diskontierung).

+0

Dann empfehle ich Ihnen verschiedene Bibliotheken verwenden. –

+1

@Viktor: zugegebenermaßen ist dies * vor allem eine Schuld der Bibliothek. Aber selbst moderne STL-Implementierungen akzeptieren einen "out-of-range" -Zugriff auf "operator []" gerne, ohne selbst im eingebauten Debug (GCC ...) so viel wie eine Warnung zu äußern. –

+2

Aber das ist kein Speicherleck? Ich möchte nicht übermütig sein, aber wenn du nie "= neu" in deinem Code schreibst (beachte das "="), bekommst du keine Speicherlecks (ja, shared_ptrs können sich gegenseitig referenzieren, aber das kommt sehr selten vor) –

4

kann Valgrind verwendet werden memleaks in c zu überprüfen ++ auch

valgrind so viele Möglichkeiten hat, die Sie Informationen geben und Sie können auch Callgrind erkunden.

--Cheers

2

Speicherlecks sind ein Anliegen, mich als C++ Entwickler. Ich nehme an, dass sie auch anderen Entwicklern ein Anliegen sind, obwohl ich nicht für alle sprechen kann. Valgrind ist ein fantastisches Werkzeug in diesem Raum und eines, ohne das ich wirklich nicht leben könnte.

1

Valgrind ist das beste Werkzeug für den Umgang mit Speicherfehlern (aber überprüfen Sie die anderen Module neben memcheck).

C-Style-Programmierung ist ein gültiger (und weit verbreiteter) Programmieransatz in C++, daher sind Speicherprobleme immer noch ein Problem.

+0

Habe bisher nur memcheck benutzt. Welche anderen Module können Sie empfehlen? – helpermethod

4

Während C++ eine viel bessere Speicherverwaltung als C bietet, ist es immer noch möglich, Fehler zu machen. Intelligente Zeiger sind großartig, aber es ist möglich, Fehler mit ihnen zu machen. Dafür ist Valgrind da.

1

ja, ist es.

Ich verwende die dynamische Zuweisung standardmäßig in Komponententests (mit Auto-Zeigern oder einem idiomatischen Äquivalent), um zusätzliche für Speicherfehler, die Valgrind erkennt, explizit zu überprüfen. Valgrind, Guardmalloc, Lecks usw. können viele Fehler auffangen, bevor sie Produktionscode eingeben.

2

erinnern gcc Laufzeit zu sagen, nicht über einen eigenen Speicher-Pool nutzen sonst verwirren Sie valgrind

GLIBCPP_FORCE_NEW = 1

+0

Offenbar ist es 'GLIBCXX_FORCE_NEW' ab Gcc 3.4. Vielleicht möchten Sie dazu [Valgrinds FAQ] (http://valgrind.org/docs/manual/faq.html#faq.reports) verlinken. – Hasturkun