kokyman Posted June 26, 2011 Report Share Posted June 26, 2011 (edited) 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 June 26, 2011 by kokyman Link to comment Share on other sites More sharing options...
AshWilliams Posted June 26, 2011 Report Share Posted June 26, 2011 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 Link to comment Share on other sites More sharing options...
MaTiNhO Posted June 26, 2011 Report Share Posted June 26, 2011 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 More sharing options...
Th3_K4T Posted June 26, 2011 Report Share Posted June 26, 2011 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 More sharing options...
kokyman Posted June 26, 2011 Author Report Share Posted June 26, 2011 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 More sharing options...
Th3_K4T Posted June 26, 2011 Report Share Posted June 26, 2011 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 More sharing options...
lostinspacex Posted June 26, 2011 Report Share Posted June 26, 2011 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 More sharing options...
kokyman Posted June 27, 2011 Author Report Share Posted June 27, 2011 ya esta mas claro =) no le hacia free, es que tenia una confusion con eso pero me ha quedado todo mas claro, gracias Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now