Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - aerolio_2

#1
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...
#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
#3
OK, gracias, ahora ya se ejecutan todos los comandos de liberación de memoria correctamente ¡¡¡¡gracias!!!! :), pero al hacer el return 0; para terminar la aplicación me sale otro error distinto:

'Runtime Check Failure #2 -S'

Supongo que esto ya se deberá a otro motivo, ¿verdad?

PD: parece ser, buscando en google, que puede deberse a un mal uso de los índices de las matrices. Le echaré un repaso al código porque como he estado considerando mal el uso de los índices desde el principio seguro que hay algo que he hecho mal.
#4
Cierto, error de principiante, como así soy..  :-[

Probaré a ver...

Graciass!




Vaya ahora el CRASH se me produce en la segunda línea de liberación:

delete[] matriz;

Me sale el siguiente error: 'HEAP CORRUPTION DETECTED: after Normal block (#128) at 0x00254270 CRT detected that the aplication wrote to memory after end of heap buffer'
#5
Sí claro que sí, aquí esta como declaro y como intento eliminar la matriz:

char **matriz;
   matriz=new char*[nlineas];
   for (i=1; i<=nlineas; i++) matriz=new char[300];


for (i=1; i<=nlineas; i++) delete [] matriz [ 300 ];

 
  delete[] matriz;



Insisto en lo de que en una máquina virtual con windows XP se ejecuta sin problemas...

PD: vaya creo que ya se cual es el error... delete [] matriz [ 300 ], esta mal, deber´ñia ser delete [] matriz [ i ], ¿verdad?.
#6
Buenas,

Estoy programando una pequeña aplicación en C++ en la cual, al terminar la ejecución y tratar de liberar la memoria dinámica con delete[], el programa provoca un error de APPCRASH  :-\.

Si el mismo programa lo ejecuto en una máquina virtual en windows XP se ejecuta correctamente, el error solo sucede si lo ejecuto en windows 7  :-(.

He buscado información sobre este error y solo he encontrado que hay que desactivar la prevención de ejecución de datos para el programa que quiera ejecutar, pero eso no me ha funcionado.

¿Qué puedo hacer?  :huh: :huh: