Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: apache_888 en 13 Noviembre 2012, 23:00 pm



Título: Duda código en C
Publicado por: apache_888 en 13 Noviembre 2012, 23:00 pm
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é? :-\

Código:
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);
}
}

Código:
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;
}


Título: Re: Duda código en C
Publicado por: 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.


Título: Re: Duda código en C
Publicado por: apache_888 en 14 Noviembre 2012, 01:59 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í:
Código:
   ...
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.


Título: Re: Duda código en C
Publicado por: naderST en 14 Noviembre 2012, 02:46 am
Código
  1. printf("\n\n%p",&paneles);
  2.  

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.

Código
  1. printf("\n\n%p",paneles);
  2.  

Así sí te imprimiría NULL


Título: Re: Duda código en C
Publicado por: apache_888 en 14 Noviembre 2012, 12:04 pm
Juassssssssssssssssssssss   que fallo el mio, gracias naderST.