Duda código en C

Iniciado por apache_888, 13 Noviembre 2012, 23:00 PM

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

apache_888

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;
}

naderST

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.

apache_888

#2
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.

naderST


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

apache_888

Juassssssssssssssssssssss   que fallo el mio, gracias naderST.