Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/07/2016, 06:29
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Archivos y Listas enlazadas simples en C

Cita:
Iniciado por matiri90 Ver Mensaje
Una pregunta, cuando vos decis de usar la funcion "free".. Yo en las funciones no las uso porque las variables locales desaparecen al terminar la invocacion de la funcion.. Eso esta bien?
Código C:
Ver original
  1. void func()
  2. {
  3.   int var;
  4.   char* ptr;
  5.   ptr = malloc(10);
  6.   char* ptr2 = ptr;
  7. }

En el código anterior:
  • var es una variable local y, como tal, será eliminada cuando el código abandone la función
  • ptr es una variable local, por lo que al abandonar la función también será eliminada
  • ptr2 es una variable local, por lo que al abandonar la función también será eliminada.
Si la memoria dinámica se liberase sola... ¿Cual de los dos punteros debería hacerlo? ¿ptr? ¿ptr2? ¿por qué?

La reserva de memoria no es local. Es una petición que le haces al sistema operativo para que te asigne una zona de memoria del tamaño pedido para tu uso exclusivo... tu te has encargado de pedirla y tu eres el responsable de liberarla cuando ya no la necesites. Si no lo haces entonces tu programa acaba teniendo fugas de memoria. Haz una búsqueda en Internet y encontrarás numerosa documentación al respecto.


Cita:
Iniciado por matiri90 Ver Mensaje
Tendria que usarlo en el main?. No entendi esa parte, mis disculpas por la ignorancia..
En un programa debería haber una equivalencia entre creaciones y liberaciones. Si no es así tu programa perderá memoria. Piensa que si haces una reserva de memoria dinámica y "pierdes" las referencias a dicha memoria no la podrás usar para nada ni tampoco liberar. Si es cierto que los sistemas operativos modernos liberan esa memoria automáticamente cuando el programa que las ha pedido se cierra... pero mientras el programa está operativo esa memoria se ocupa de forma innecesaria.

Cita:
Iniciado por matiri90 Ver Mensaje
Despues el tema del guardado y creacion del archivo.. No termino de entender..
Si yo no creo el archivo dentro de la carpeta donde esta el .exe.. No funciona, pero deberia crearlo solo.. (a mi entender)
Despues, solo guarda uno de los elementos en el archivo y no tengo idea de por que!?
Yo te recomendaría dar un buen repaso al programa, simplificarlo y evitar código duplicado en la medida de lo posible... una vez hecho eso vuelve por el foro, pon el programa actualizado y pregunta tus dudas... piensa que una vez tocas tu programa de forma local, el código que aparece en el foro pasa a estar obsoleto.

No obstante te informo que si no le pones una ruta exacta al fichero éste se creará a partir de la ruta de trabajo del ejecutable... que no tiene por qué coincidir con la ubicación del ejecutable. Esto puede provocar que el programa intente escribir en una ruta no válida y falle. Prueba a usar rutas absolutas en vez de rutas relativas. También debes tener en cuenta el tema de los permisos de acceso.

Por cierto, el depurador de código es una herramienta imprescindible para programar, te recomiendo aprender a usarlo.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.