Sí, hay un problema con los punteros. Es muy probable que esté utilizando uno que no se haya inicializado correctamente, pero también es posible que esté estropeando su administración de memoria con doble libre o algo así.
Para evitar punteros no inicializados como variables locales, intente declararlos lo más tarde posible, preferiblemente (y esto no siempre es posible) cuando se pueden inicializar con un valor significativo. Convénzase de que tendrán un valor antes de que se utilicen, examinando el código. Si tiene alguna dificultad con eso, inicializarlas a una constante puntero nulo (generalmente escrita como NULL
o 0
) y comprobar ellos.
Para evitar punteros no inicializados como valores de miembros, asegurarse de que estén inician correctamente en el constructor, y se maneja apropiadamente de constructores de copia y operadores de asignación. No confíe en una función init
para la administración de memoria, aunque puede hacerlo para otra inicialización.
Si su clase no necesita constructores de copia o los operadores de asignación, se puede declarar como funciones miembro privadas y nunca definirlos. Eso causará un error de compilación si se usan explícita o implícitamente.
utilizar punteros inteligentes cuando corresponda. La gran ventaja aquí es que, si los respeta y los usa consistentemente, puede evitar escribir por completo delete
y no se eliminará por duplicado.
Utilice C++ cuerdas y clases de contenedores siempre que sea posible, en lugar de cadenas estilo C y matrices. Considere usar .at(i)
en lugar de [i]
, porque eso forzará la comprobación de límites. Vea si su compilador o biblioteca pueden configurarse para verificar límites en [i]
, al menos en modo de depuración. Las fallas de segmentación pueden ser causadas por sobrepasados de buffer que escriben basura sobre punteros perfectamente buenos.
hacer esas cosas que reducirá considerablemente la probabilidad de fallos de segmentación y otros problemas de memoria. Sin duda, no podrán arreglar todo, y es por eso que debería usar valgrind de vez en cuando cuando no tenga problemas, y valgrind y gdb cuando lo haga.
bien esto sería 4 bytes en lugar de 1 ... pero el principio está bien. –
¿Puedo hacer un enlace a mi [depurador de montón no intrusivo] (http://stackoverflow.com/questions/2835416)? :-) – fredoverflow
Vaya por ello. Nos dedicamos a ayudar a los demás aquí para que todo lo que pueda ayudar se agregue. – wheaties