Libros MemDin
Este apartado es continuación del ejemplo en LibrosIO. El archivo cabecera util.h es el mismo pero ahora la memoria necesaria para almacenar un Libro se obtiene de forma dinámica invocando la llamada al sistema calloc()
Claves del ejemplo
- Puntero
void y casting if en línea #29 - Siempre hay que devolver la memoria obtenida antes de terminar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <stdarg.h>
#include "util.h"
/*
* Memoria dinámica: malloc, free, calloc, realloc
*/
int main() {
void *yaveremos; /* Se declara un puntero, en principio, a cualquier cosa */
int retv = 0;
printf("libIOmemdin:\n");
printf("----------\n");
printf("Cuánto ocupa un libro? %d bytes\n", (int) sizeof(Libro));
printf("Y un puntero a un libro? %d bytes\n", (int) sizeof(ptrLibro));
/*
Creación de un libro reservando memoria de forma
dinámica invocando calloc (malloc + init)
Vía malloc:
yaveremos = (ptrLibro) malloc (sizeof(Libro));
Vía calloc:
*/
yaveremos = (ptrLibro) calloc (1, sizeof(Libro));
if (yaveremos == NULL)
retv = -1; /* MUY IMPORTANTE: la asignación falló. Probablemente, no hay memoria */
else {
iniLibro(yaveremos, 123456, "Programación en PHP", "Pepito Grillo", "Introducción a PHP");
verLibro(yaveremos);
free(yaveremos); /* Liberamos memoria (es un recurso escaso) */
}
return retv;
}
|