Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 27 Abril 2016, 21:23 pm



Título: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: NOB2014 en 27 Abril 2016, 21:23 pm
Hola, gente.
Nuevamente con cositas que no puedo resolver consultando al amigo Google, de la manera como está planteado el programa ¿es imposible liberar la memoria asignada al puntero arr?, el manual aconseja que nunca se reserve memoria de esta manera, pero aunque sea para tener un conocimiento más, es realmente cierta mi pregunta. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int *asignar_Array(int size, int valor);
  5.  
  6. int main( void ){
  7. size_t i;
  8. int *vector = asignar_Array(5,45);
  9.  
  10. for( i=0; i<5; i++ ){
  11. printf("\n %d", vector[i]);
  12. }
  13.  
  14. free(vector);
  15.  
  16. return (EXIT_SUCCESS);
  17. }
  18.  
  19. int *asignar_Array(int size, int valor) {
  20. size_t i;
  21. int *arr = (int*)malloc( size * sizeof(int ));
  22.  
  23. for( i=0; i<size; i++ ) {
  24. arr[i] = valor;
  25. }
  26.  
  27. return arr;
  28. }


Saludos.


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: MAFUS en 27 Abril 2016, 21:32 pm
En verdad no sé que manual estás siguiendo pero tíralo.
El programa está bien y, por ejemplo, así funciona la función de libreria fopen.

Código
  1. FILE *f = fopen(ruta, modo);

Date cuenta que tu función retorna la dirección de inicio del bloque que has adquirido de memoria. Lo único que tienes que hacer es no perderlo en ningún momento para pasárselo a free.


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: NOB2014 en 27 Abril 2016, 22:08 pm
Hola, MAFUS. -
Por favor y antes de que tenga que hacer meditación para tranquilizarme, ¿que tiene que ver mi programas con los archivos?

Código
  1. FILE *f = fopen(ruta, modo);

Citar
En verdad no sé que manual estás siguiendo pero tíralo.
jajajajajajajajaja.....

No obstante, ya descubrí por donde viene la mano:

(http://i65.tinypic.com/307m4v8.png)


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: MAFUS en 27 Abril 2016, 22:18 pm
Es un ejemplo para que veas que hasta en la librería estándar usan el mismo código que tu, y que tanto odia tu manual. En serio, tíralo.


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: HardForo en 27 Abril 2016, 22:31 pm
Es un ejemplo para que veas que hasta en la librería estándar usan el mismo código que tu, y que tanto odia tu manual. En serio, tíralo.

 ;-)


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: NOB2014 en 27 Abril 2016, 22:46 pm
MAFUS, no seas tan duro con mi manual, es interesantisimo.-

(http://i63.tinypic.com/jj396s.png)

Saludos.


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: geeke en 28 Abril 2016, 03:12 am
Es un excelente libro el que estas leyendo; pero hubo un malentendido de tu parte; en el libro no lo recomiendan por podría conducir a una fuga de memoria, en el caso de que la memoria asignada no se haya liberado como claramente se menciona en la ultima parte es nuestra responsabilidad liberarla

Código
  1. int* vector = allocateArray(5,45);
  2. free(vector);

Te invito a que vuelvas a leer mas detenidamente esta parte


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: NOB2014 en 28 Abril 2016, 04:03 am
Hola, Geeke.
Muchas gracias por el aporte, te voy a hacer una confesión, no tengo la más pálida idea del inglés y lo estoy traduciendo utilizando 4 traductores en línea (la tradución que me parece más acertada la paso a un borrador para estudiarlo luego) y como te imaginaras por momento entre la traducción que no es exacta y las ganas de disipar mis dudas ocurren estas cosas. -
Lo de no saber nada del idioma es por mis 64 años, en mis tiempos de estudio casi no se le daba importancia al inglés, pero como todos en los foros (cuando se da la oportunidad) me dicen que los mejores contenidos están en ese idioma, bueno estoy asiendo el esfuerzo.

Te envio un abrazo.


Título: Re: Liberar memoria asignada con malloc, después de salir de la función [C].
Publicado por: HardForo en 28 Abril 2016, 04:28 am
Mi consejo........ estudia el vocabulario.......veras que se repite ......si lo conoces, luego la gramatica inglesa es bastante cercana a la nuestra, al menos se estructura en igual en terminos generales (sujeto-verbo-objeto)