Autor
|
Tema: Reemplazar la función free por una propia. (Leído 3,252 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
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. - #include <stdio.h> #include <stdlib.h> #define safeFree(p) saferFree((void**)&(p)) void saferFree(void **pp); int main( void ){ int *pi; pi = (int*) malloc(sizeof(int)); *pi = 5; printf("\n Antes.....: %p\n",pi ); safeFree(pi); printf("\n Despues...: %p\n",pi ); safeFree(pi); return (EXIT_SUCCESS); } void saferFree(void **pp) { if (pp != NULL && *pp != NULL) { *pp = NULL; } }
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.603
|
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
Mensajes: 366
|
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
Mensajes: 298
un defecto se puede convertir en una virtud
|
con null seria suficiente
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 366
|
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.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Funcion reemplazar en Visual basic 6.0
« 1 2 »
Programación Visual Basic
|
merlin
|
10
|
9,218
|
4 Junio 2007, 07:57 am
por merlin
|
|
|
escape_string es una funcion propia de PHP?
PHP
|
Shell Root
|
2
|
4,172
|
8 Marzo 2010, 14:09 pm
por Castg!
|
|
|
[C] [?] Función free() y uso posterior
Programación C/C++
|
iplazlac
|
2
|
3,244
|
21 Noviembre 2010, 18:35 pm
por iplazlac
|
|
|
reemplazar funcion en la IAT
Análisis y Diseño de Malware
|
tig0
|
0
|
2,609
|
13 Septiembre 2011, 17:58 pm
por tig0
|
|
|
Funcion strcpy() propia
Programación C/C++
|
juanma97
|
7
|
3,817
|
24 Febrero 2017, 01:40 am
por BloodSharp
|
|