elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Reemplazar la función free por una propia.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Reemplazar la función free por una propia.  (Leído 2,774 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Reemplazar la función free por una propia.
« en: 25 Abril 2016, 22:33 pm »

Hola, gente.
Lo que me trae en este caso es una duda con la función free, con el libro que estoy estudiando punteros a cada instante remarca que la función free es insegura, no pongo aquí los argumento porque necesitaría 2 post, la pregunta es ¿por su experiencia consideran que esto es cierto?, debería utilizar la función que dejo a continuación o es esto una falacia. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define safeFree(p) saferFree((void**)&(p))
  5.  
  6. void saferFree(void **pp);
  7.  
  8. int main( void ){
  9. int *pi;
  10. pi = (int*) malloc(sizeof(int));
  11. *pi = 5;
  12.  
  13. printf("\n Antes.....: %p\n",pi);
  14.  
  15. safeFree(pi);
  16.  
  17. printf("\n Despues...: %p\n",pi);
  18.  
  19. safeFree(pi);
  20.  
  21. return (EXIT_SUCCESS);
  22.  
  23. }
  24.  
  25. void saferFree(void **pp) {
  26. if (pp != NULL && *pp != NULL) {
  27. free(*pp);
  28. *pp = NULL;
  29. }
  30. }

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Reemplazar la función free por una propia.
« Respuesta #1 en: 25 Abril 2016, 22:50 pm »

La función free hace exactamente lo que debe hacer, que es liberar memoria. Ya si sigues guardando el puntero o no, no depende de free.

Yo de ti, trataba de acordarme siempre manualmente de liberar, y si es necesario (que no siempre tiene por qué serlo), asignar NULL a la variable. Vamos, que si te acuerdas de llamar a "saferFree" te acuerdas de hacer =NULL xD


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Reemplazar la función free por una propia.
« Respuesta #2 en: 26 Abril 2016, 01:10 am »

En verdad C es de por sí inseguro y solo le interesa la velocidad y la libertad del programador. A parte del ensamblador es, seguramente, el lenguaje más libre_de_hacer_lo_que_quieras que haya circulando por el mundo.
Es como un gran muscle car sin control de derrape, ni abs, ni de tracción activa: o eres un buen piloto o no le sacas todo el partido al coche o, peor aún, te estrellas.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Reemplazar la función free por una propia.
« Respuesta #3 en: 26 Abril 2016, 01:22 am »

Hola, ivancea96.
Bien, NULL hace que el puntero no apunte a un dato valido, de esta manera, nos aseguramos que si accidentalmente invocamos a este puntero no apunte a la dirección que reservamos con malloc (que contendrá basura), espero estar acertado en este concepto. -
En cuanto a lo que hace free() parase un poco más complejo, voy a seguir leyendo para saber el porqué de tanto énfasis del libro en lo utilizar free() a secas y utilizar la función que se sugiere en el mismo. -

Gracias a ambos por ocuparse.
Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: Reemplazar la función free por una propia.
« Respuesta #4 en: 26 Abril 2016, 01:28 am »

con null seria suficiente
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Reemplazar la función free por una propia.
« Respuesta #5 en: 26 Abril 2016, 01:34 am »

La cosa es que si intentas acceder a un puntero liberado por free, pero que no se ha llevado a NULL, nadie se va a quejar y el programa puede seguir corriendo y puedes ver los efectos de una cascada de errores más adelante, difícil de depurar si el error se ha ido transmitiendo bastante lejos. Pero si llevas a NULL el puntero, al siguiente acceso que hagas a él para escribir te tirará error con lo que ya sabrás que ese puntero se ha liberado antes de lo previsto, así puedes localizar el error con más precisión.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Reemplazar la función free por una propia.
« Respuesta #6 en: 26 Abril 2016, 02:51 am »

MAFUS, como siempre muchas gracias por tus aportes. -

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funcion reemplazar en Visual basic 6.0 « 1 2 »
Programación Visual Basic
merlin 10 8,288 Último mensaje 4 Junio 2007, 07:57 am
por merlin
escape_string es una funcion propia de PHP?
PHP
Shell Root 2 4,014 Último mensaje 8 Marzo 2010, 14:09 pm
por Castg!
[C] [?] Función free() y uso posterior
Programación C/C++
iplazlac 2 2,996 Último mensaje 21 Noviembre 2010, 18:35 pm
por iplazlac
reemplazar funcion en la IAT
Análisis y Diseño de Malware
tig0 0 2,335 Último mensaje 13 Septiembre 2011, 17:58 pm
por tig0
Funcion strcpy() propia
Programación C/C++
juanma97 7 3,268 Último mensaje 24 Febrero 2017, 01:40 am
por BloodSharp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines