Función inicializar imagen

Función inicializar imagen

de Joan Francisco Rodrigues De Sa Martinez -
Número de respuestas: 2

Buenas!!

Respecto a la función inicializar imagen, se la llama desde el main como "inicializar_imagen(Imagen_t* pin, int filas, int columnas);". 

Por letra se declara pin como puntero al tipo Imagen_t mi duda es si desde el main antes de llamar a la función es correcto utilizar malloc para darle la memoria al puntero pin, es decir si antes de la función, al puntero pin le damos el tamaño de memoria que necesita por ser del tipo Imagen_t y luego que la función si trabaje directo con ese puntero pin y su memoria.


Saludos!!

En respuesta a Joan Francisco Rodrigues De Sa Martinez

Re: Función inicializar imagen

de Camilo Joaquin Mariño Cabrera -

Buenas.

Imagino que estás realizando pruebas desde un main en la función inicializar_imagen. Aclaro esto porque en el main que tienen que entregar no deberian llamar a inicializar_imagen directamente, de esto se encargará la funcion leer_imagen.

Hecha la aclaración anterior y suponiendo que vas a llamar directamente inicializar_imagen con 50 filas y 40 columnas desde el main, existen 2 formas pasar pin a esta función. 

La primera forma:

Imagen_t pin;

int filas = 50;

int columnas = 40;

incializar_imagen(&pin, filas, columnas);

/* aca va más codigo */

/* luego de terminar hay que liberar la memoria solo de los pixeles de pin (llamando a destruir_imagen) y NO de pin */

En este caso se define pin como una variable estructura y se la pasa por referencia a la función.

La segunda forma, que es la que mencionas en tu mensaje, es:

Imagen_t * pin;

pin = malloc(sizeof(Imagen_t));

int filas = 50;

int columnas = 40;

incializar_imagen(pin, filas, columnas);

/* aca va más codigo */

/* luego de terminar hay que liberar la memoria de los pixeles de pin (llamando a destruir_imagen) y a pin (hay que hacer free(pin))*/


Ambas son correctas, sin embargo, la Nota 1 que está inmediatamente después de la descripción de incializar_imagen sugiere que en el main declaren las variables Imagen_t y pasen sus direcciones de memoria (a la función leer_imagen que luego llamara a incializar_imagen) . De esta forma no tienen que hacer malloc y free para variables de tipo Imagen_t.

Es algo entreverado el que haya 2 formas posibles, por lo que si algo no se entendió no dudes en volver a consultar.