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. -
#include <stdio.h>
#include <stdlib.h>
int *asignar_Array(int size, int valor);
int main( void ){
size_t i;
int *vector = asignar_Array(5,45);
for( i=0; i<5; i++ ){
printf("\n %d", vector[i]);
}
free(vector);
return (EXIT_SUCCESS);
}
int *asignar_Array(int size, int valor) {
size_t i;
int *arr = (int*)malloc( size * sizeof(int ));
for( i=0; i<size; i++ ) {
arr[i] = valor;
}
return arr;
}
Saludos.
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.
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.
Hola, MAFUS. -
Por favor y antes de que tenga que hacer meditación para tranquilizarme, ¿que tiene que ver mi programas con los archivos?
FILE *f = fopen(ruta, modo);
CitarEn 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)
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.
Cita de: 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.
;-)
MAFUS, no seas tan duro con mi manual, es interesantisimo.-
(http://i63.tinypic.com/jj396s.png)
Saludos.
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
int* vector = allocateArray(5,45);
free(vector);
Te invito a que vuelvas a leer mas detenidamente esta parte
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.
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)