Por lo tanto, necesito ayuda. Estoy trabajando en un proyecto en C++. Sin embargo, creo que de alguna manera he logrado corromper mi montón. Esto se basa en el hecho de que he añadido un std::string
a una clase y asignándole un valor de otra std::string
:De administración de memoria, corrupción de montón y C++
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
accidentes en mi sistema con un volcado de pila. Así que, básicamente, necesito detener e ir a través de todo mi código y cosas de gestión de memoria y averiguar dónde he metido la pata. La base de código todavía es pequeña (alrededor de 1000 líneas), por lo que es fácilmente factible.
Aún así, estoy sobre mi cabeza con este tipo de cosas, así que pensé en tirarlo allí. Estoy en un sistema Linux y busqué con valgrind
, y aunque no sabía completamente lo que estaba haciendo, sí informaba que el destructor std::string
no era válido. Debo admitir que recibí el término 'Heap Corruption' de una búsqueda en Google; también se apreciarían artículos de propósito general sobre este tipo de cosas.
(En rm -rf ProjectDir
antes, hacer de nuevo en C#: D)
EDIT: no he dejado claro, pero lo que estoy pidiendo son formas en que un consejo de diagnóstico de este tipo de problemas de memoria. Sé que las cosas de std :: string son correctas, así que es algo que he hecho (o un error, pero no es un problema con Select). Estoy seguro de que podría verificar el código que he escrito y ustedes muy inteligentes verían el problema en un instante, pero quiero agregar este tipo de análisis de código a mi 'caja de herramientas', por así decirlo.
+1, buena lista! Sin embargo, disputaría el n. ° 8: si bien impide los accesos "malos", en realidad es un olor codificado que oculta la lógica pobre o la administración deficiente de la vida útil de los objetos en mi experiencia ... – Roddy
Actualmente, C++ tiene sus propios indicadores inteligentes en el estándar biblioteca, así que no hay necesidad de Boost o Loki para eso. –