Error al liberar memoria con free
Publicado por races (25 intervenciones) el 24/02/2006 16:50:54
Hola amigos me encuentro con el siguiente problema, estoy utilizando variables las cuales introduzco por parámetro, para ello reservo memoria mediante malloc cuando intento liberar memoria me da un pantallazo en el cual me dice DAMAGE: after normal block #36
A que puede ser debido esto y como solucionarlo, muestro un código ejemplo que me ocurre lo mismo. Compilo con Visual Studio 6.0
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char * a = NULL;
char * b = NULL;
char * c = NULL;
void main(int argc, char * argv[])
{
if(argc == 3)
{
a = (char *)malloc(strlen(argv[1]));
b = (char *)malloc(strlen(argv[2]));
strcpy(a,argv[1]);
strcpy(b,argv[2]);
a[strlen(a)] = '\0';
b[strlen(b)] = '\0';
}
else
{
return;
}
printf("A --> %s\n",a);
printf("B --> %s\n",b);
c = (char *)malloc(strlen(a) + strlen(b));
printf("CONCATENANDO\n");
strcpy(c,a);
strcat(c," y ");
strcat(c,b);
printf("LIBERANDO MEMORIA\n");
// Aqui sale el error
free(a);
free(b);
a = NULL;
b = NULL;
printf("C --> %s\n",c);
}
GRACIAS POR VUESTRA AYUDA. UN SALUDO ATENTAMENTE
A que puede ser debido esto y como solucionarlo, muestro un código ejemplo que me ocurre lo mismo. Compilo con Visual Studio 6.0
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char * a = NULL;
char * b = NULL;
char * c = NULL;
void main(int argc, char * argv[])
{
if(argc == 3)
{
a = (char *)malloc(strlen(argv[1]));
b = (char *)malloc(strlen(argv[2]));
strcpy(a,argv[1]);
strcpy(b,argv[2]);
a[strlen(a)] = '\0';
b[strlen(b)] = '\0';
}
else
{
return;
}
printf("A --> %s\n",a);
printf("B --> %s\n",b);
c = (char *)malloc(strlen(a) + strlen(b));
printf("CONCATENANDO\n");
strcpy(c,a);
strcat(c," y ");
strcat(c,b);
printf("LIBERANDO MEMORIA\n");
// Aqui sale el error
free(a);
free(b);
a = NULL;
b = NULL;
printf("C --> %s\n",c);
}
GRACIAS POR VUESTRA AYUDA. UN SALUDO ATENTAMENTE
Valora esta pregunta


0