In rete ho trovato un esempio delle funzioni malloc() e realloc().
Alla riga 38 è riportato l'istruzione " if(usati>allocati)".
Qualcuno potrebbe spiegarmi perchè è stato introdotto questo controllo?
Dal momento che si entra nel ciclo while (riga 35),
l'incremento della variabile "usati" è sempre garantita
(riga 37 usati += dimint;)e quindi
l'istruzione if(usati>allocati) (riga 38)
sarà sempre VERA...
Ciao
***********************************************************+
Sito da cui ho copiato il codice:
http://www.html.it/pag/15417/allocazione-dinamica-della-memoria-funzione-realloc/
*********************************
1 #include <stdio.h>
2
3 int main()
4 {
5 char buffer[20];
6 int i=0, n=0, x, *array, nb;
7
8 /* byte allocati */
9 int allocati;
10 /* byte in un blocco */
11 int dimbloc;
12 /* byte in un intero */
13 int dimint;
14 /* byte contenenti interi */
15 int usati;
16
17 nb = 1;
18 printf(“Elementi in un blocco: %dn”, nb);
19
20 dimint = sizeof(int);
21 dimbloc = nb * dimint;
22 usati = 0;
23
24 array = (int *)malloc(dimbloc);
25 if(array == NULL)
26 {
27 printf(“Memoria insufficienten”);
28 exit(1);
29 }
30
31 allocati = dimbloc;
32 printf(“Allocati: %d bytesn”, allocati);
33 printf(“Input di interi terminati da # :n”);
34
35 while(scanf(“%d”, & x))
36 {
37 usati += dimint;
38 if(usati>allocati)
39 {
40 allocati += dimbloc;
41 array = (int *)realloc(array, allocati);
42 if(array == NULL)
43 {
44 printf(“Memoria insufficienten”);
45 exit(1);
46 }
47 i++;
48 }
49 /* in questo modo vengono letti n interi */
50 array[n++] = x;
51 }
52
53 printf(“n”);
54 printf(“Allocati: %d bytesn”, allocati);
55 printf(“Dim. blocchi: %d bytesn”, dimbloc);
56 printf(“Dim. intero: %d bytesn”, dimint);
57 printf(“Usati: %d bytesn”, usati);
58 printf(“Chiamate realloc: %dn”, i);
59 printf(“Numeri: %dn”, n);
60 printf(“nEcco i numerin”);
61
62 for(i=0; i<n; i++)
63 {
64 printf(“%5d%c”, array[i], i%10 == 9 ? ‘n’ : ‘ ‘);
65 }
66
67 printf(“n”);
68
69 return 0;
70 }