Crash al usar operadores new y delete.

Iniciado por aerolio_2, 25 Marzo 2017, 20:33 PM

0 Miembros y 1 Visitante están viendo este tema.

aerolio_2

Buenas,

Tengo un error que me está volviendo loco y no sé que hacer en algo que, aparentemente, es muy sencillo. Se trata de un crash a la hora de liberar memoria con delete. El código que estoy usando para crear la matriz dinámica de caracteres es el siguiente:

Código (cpp) [Seleccionar]
char **codigo;

codigo = new char*[(5*lineas)+1];
for (i = 0; i <= 5*lineas; i++) codigo[i] = new codigo[1001];

...

[ codigo del programa ]

...


for (i = 0; i <= 5 * lineas; i++) delete[] codigo[i];

delete[] codigo;



El error siempre se me produce en dos valores concretos, para i=256  o i= 527 y es un error intermitente, es decir, a veces me crashea en i=256, otras en i= 527 y otras veces me libera la memoria sin problemas y se termina de ejecutar el programa completo.

No encuentro ningún patron en las lineas en las que s eproduce el fallo y lo más desquiciante es el hecho de la aleatoriedad de que unas veces falle y otras no, con las mimsas condiciones de partida...  :-( :-( :-(


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

ivancea96

En un lugar pusiste atvl y en el otro pusiste codigo.
Y luego pusiste new codigo[1001] en vez de new char[1001].

Será
Código (cpp) [Seleccionar]
codigo[i] = new char[1001];

aerolio_2

Corregido, en todas las lineas está escrito codigo. En cualquier caso el problema creo que no está a la hora de hacer el delete, sino que durante la ejecución del programa se termina escribiendo en una zona de memoria donde no se debe...