2010-10-25 10 views
5

Soy bastante nuevo en C++ pero tengo algunos conocimientos básicos de C. En mis proyectos C (universitarios) pasados, utilicé Valgrind para verificar si había recuerdos meméticos.Valgrind utilizado en el desarrollo de C++?

Ahora, con C++, ¿Valgrind es una herramienta válida? ¿C++ sufre los mismos problemas con respecto a Memleaks como C? ¿O hay herramientas aún mejores para usar junto con C++?

Respuesta

8

Nunca utilizo new y delete (u otras formas de gestión de memoria manual) y muy raramente uso punteros. E I todavía tienen que luchar con pérdidas de memoria accesos de memoria no válidos. Valgrind es una herramienta indispensable para mí. Aún más importante que gdb.


Como Viktor señaló en un comentario, produciendo pérdidas de memoria sin una gestión de memoria manual sería bastante raro (descontando las referencias circulares y otros casos especiales).

+0

Entonces le sugiero que utilice diferentes bibliotecas. –

+1

@Viktor: admitidamente, este * es * en gran parte un error de la biblioteca. Pero incluso las implementaciones modernas de STL aceptan felizmente un acceso fuera de rango en 'operator []' sin emitir siquiera una advertencia, incluso en debug built (GCC ...). –

+2

Pero eso no es una pérdida de memoria? No quiero ser engreído, pero si nunca escribes "= new" en tu código (ten en cuenta "="), no obtienes fugas de memoria (sí, shared_ptrs puede hacer referencias cruzadas entre sí, pero eso ocurre muy raramente) –

4

Valgrind se puede utilizar para comprobar memleaks en C++ también

valgrind tiene tantas opciones que le dará información y se puede explorar también Callgrind.

--Cheers

2

pérdidas de memoria son una preocupación para mí como desarrollador C++. Supongo que son una preocupación para otros desarrolladores también, aunque no puedo hablar por todos. Valgrind es una herramienta fantástica en este espacio y una que realmente no podría vivir sin él.

1

Valgrind es la mejor herramienta disponible para manejar los errores de memoria (pero revise los otros módulos al lado de memcheck).

La programación de estilo C es un enfoque de programación válido (y ampliamente utilizado) en C++, por lo tanto, sí, los problemas de memoria siguen siendo un problema.

+0

Solo han usado memcheck todavía. ¿Qué otros módulos puedes recomendar? – helpermethod

4

Mientras que C++ tiene un manejo de la memoria mucho mejor que la C, es bastante posible perder el control. Los indicadores inteligentes son geniales, pero es posible cometer errores con ellos. Para eso es Valgrind.

1

sí, lo es.

utilizo la asignación dinámica por defecto en pruebas unitarias (con punteros automáticos, o un equivalente idiomático), para comprobar de forma explícita los errores de memoria adicionales que valgrind puede detectar. valgrind, guardmalloc, leaks, etc. pueden detectar muchos errores antes de ingresar al código de producción.

2

recordar que contar el tiempo de ejecución gcc para no utilizar su propia piscina privada de memoria de lo contrario se confunda valgrind

GLIBCPP_FORCE_NEW = 1

+0

Aparentemente es 'GLIBCXX_FORCE_NEW' de gcc 3.4 en adelante. es posible que desee vincularlo a [Preguntas frecuentes de Valgrind] (http://valgrind.org/docs/manual/faq.html#faq.reports) acerca de esto. – Hasturkun