Título: Reemplazar la función free por una propia. Publicado por: NOB2014 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
Saludos. Daniel Título: Re: Reemplazar la función free por una propia. Publicado por: ivancea96 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 Título: Re: Reemplazar la función free por una propia. Publicado por: MAFUS 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. Título: Re: Reemplazar la función free por una propia. Publicado por: NOB2014 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. Título: Re: Reemplazar la función free por una propia. Publicado por: + 1 Oculto(s) en 26 Abril 2016, 01:28 am con null seria suficiente
Título: Re: Reemplazar la función free por una propia. Publicado por: MAFUS 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.
Título: Re: Reemplazar la función free por una propia. Publicado por: NOB2014 en 26 Abril 2016, 02:51 am MAFUS, como siempre muchas gracias por tus aportes. -
Saludos. |