Hola a todos. Tengo una pequeña duda con la reserva de memoria en C.
He creado las dos siguiente funciones, una para reservar memoria para una matriz de FilxCol y otra para liberarla. En principio creo que están bien, la cosa es que si después de llamar a estas funciones hago un printf y muestro la dirección a la que apunta matriz, no me sale NULL sino que apunta a una dirección tipo 0x7fff9db436d0. ¿por qué? :-\
void reserva_doble_char(int fil,int col,char ***matriz)
{
int i=0;
(*matriz)=(char **)malloc(sizeof(char *)*fil);
for(i=0;i<fil;i++)
{
(*matriz)[i]=(char *)malloc(sizeof(char)*col);
}
}
void liberar_doble_char(int fil,char *** ptr)
{
int i=0;
for(i=0;i<fil;i++)
{
free((*ptr)[i]);
(*ptr)[i]=NULL;
}
free(*ptr);
(*ptr)=NULL;
}
Al parecer no hay ningún problema con estas funciones. Si puedes mostrar el código donde llamas a estas funciones y haces el printf sería bueno.
Cita de: naderST en 14 Noviembre 2012, 01:43 AM
Al parecer no hay ningún problema con estas funciones. Si puedes mostrar el código donde llamas a estas funciones y haces el printf sería bueno.
La llamada a estas funciones es así:
...
int main(int argc, char **argv)
{
char ** paneles=NULL;
int nPaneles;
...
reserva_doble_char(nPaneles,50,&paneles);
...
liberar_doble_char(nPaneles,&paneles); //Aquí se supone que paneles no apunta a ninguna dirección.
printf("\n\n%p",&paneles);
...
}
Lo único que se me ocurre es que el poner "ptr=NULL" no sirve de nada.
printf("\n\n%p",&paneles);
Estás imprimiendo la dirección de memoria de paneles mas no la dirección a donde está apuntando. Nunca te va a imprimir NULL.
printf("\n\n%p",paneles);
Así sí te imprimiría NULL
Juassssssssssssssssssssss que fallo el mio, gracias naderST.