Jump to content

duda malloc y free


Recommended Posts

Cuando creo un vector dinamicamente y despues le hago free se "borra" todo verdad?

tambien cuando creo un vector dinamico en una funcion este "desaparece" al salirse de la funcion?

 

basicamente son esas dudas, ojala me conteste gente que sepa, y que no salgan con la "preguntele a google" xD

 

 

ups, tengo otra duda mas, puedo usar solo un puntero a FILE para administrar archivos?, o genera errores esto, ahhh? xd

 

gracias a los que se molesten en abrir el tema xd, y mas a los que respondan =) xd

Edited by kokyman
Link to comment
Share on other sites

Mira...con malloc asignas memoria a usar...por ejemplo tu sabes que tu vector usará un espacio de memoria conocido....en listas con malloc asignas ese espacio de memoria a tu vector...es como rabajar con arreglos...ahi no asignas memoria porque el largo de tu arreglo esta predefinido ok....con listas sin embargo no es asi, por lo que te debes asegurar que exista memoria para el sig elemento de tu lista.....y con free liberas esa memoria usada....es como cuando trabajas con variables sin inicializarlas...si las muestras en pantalla a veces tienen basura; si no liberas la memoria quedará con los datos que ingresaste, y si despues en otra aplicación declaras una variable que justo apunta a ese sector de memoria al mostrarla tendrá basura.....todos estos son casos que nunca pasarían en los sistemas actuales pero que es bueno aprenderlos para ver como funciona la memoria y la asignacion de espacios...saludos :notonto:

Link to comment
Share on other sites

Tienes una casa (Un fragmento de memoria), a la que le asignas una dirección conocida (El puntero y su dirección, ej "*puntero"), eso con Malloc, cuan grande sea la casa, depende de lo que necesites (o sea, de los parámetros de malloc), ahora procedes a habitar la casa, llenarla, ahí vas a el contenido (o sea "puntero"), luego no necesitas más, aplicas free, ya no necesitas las casa, la indicas como disponible, pero la casa continua ocupada!. Eso significa que si recurres a malloc nuevamente, es posible, que recurra a esa casa nuevamente (o dirección de memoria), sin importar si tiene gente viviendo, o sea cagaron las personas (o datos). Por eso, para no dejar la memoria cargada con cosas que no se ocuparan. Luego de aplicar free, asignale NULL.

Link to comment
Share on other sites

Si creas un vector dinámico en una función y no lo retornas, este "desaparece", ya que en C, las variables de las funciones son sólo locales.

 

Y bueno, mi duda es, cómo aplicas el free y cómo tienes implementado el vector dinámico para saber si lo hiciste bien.

 

Bueno, en el caso de los vectores si no me equivoco basta con hacerle free a la dirección del primer elemento y como es memoria contigua se elimina todo el vector, pero en el caso de listas o árboles, hay que eliminar cada nodo por separado.

Link to comment
Share on other sites

me ha quedado mas clara la pelicula, gracias

 

basicamente lo hago asi

 

int *p;

p=(int *)malloc(sizeof(int) *10);

free(p);

 

y eso del FILE, se puede hacer todo con un puntero a file verdad?, pero eso genera errores si se me olvida cerrar algo, o queda basura en los punteros o en el archivo?

Link to comment
Share on other sites

para cerrar un fichero se utiliza fclose(puntero_a_archivo);

 

Con esto cierras el stream, devuelve 0 si tuvo éxito. De ahí en adelante si tú quieres hacer apuntar el puntero a null es cosa tuya, pero no es necesario, basta con fclose.

Link to comment
Share on other sites

Cuando creo un vector dinamicamente y despues le hago free se "borra" todo verdad?

tambien cuando creo un vector dinamico en una funcion este "desaparece" al salirse de la funcion?

 

basicamente son esas dudas, ojala me conteste gente que sepa, y que no salgan con la "preguntele a google" xD

 

 

ups, tengo otra duda mas, puedo usar solo un puntero a FILE para administrar archivos?, o genera errores esto, ahhh? xd

 

gracias a los que se molesten en abrir el tema xd, y mas a los que respondan =) xd

 

 

le haces un free al final de la función? , si no es así depende de tu sistema operativo como maneje los procesos.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...