Bene, quindi alla fine l'allocazione dinamica serve (anche?) per salvare delle variabili/strutture/array (restituirle)... che vengono elaborate all'interno di una funzione, solo che dopo che questa viene eseguita tutto il contenuto di esse viene distrutto quindi grazie all'allocazione dinamica chiediamo dello spazio in memoria dove salvare quel contenuto in modo da evitare che venga distrutto dall'uscita della funzione e poi grazie ad un puntatore che punta al primo indirizzo di quello spazio che abbiamo allocato riusciamo a riprendere i dati e utilizzarli come meglio ci pare per poi eliminarli quando non ci servono liberando quello spazio allocato con free().
L'uso:
codice:
int *puntatore = malloc(6 * sizeof (int));
int *ptr = calloc(6,sizeof (int));
(6 elementi di tipo int)
La calloc è più lenta perchè inizializza a zero gli elementi allocati mentre la malloc no (è questa l'unica differenza?)
Quando si alloca se l'allocazione non ha successo allora ritorna un NULL...
Questo è tutto quello che sono riuscito a capire...
Ora voglio dunque provare a creare una funzione che mi restituisce una struttura, questo è quello che ho provato a fare ma nulla le operazioni tra puntatori continuano a fregarmi emoji17.png
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int x;
int y;
}database;
int p(int n)
{
int i;
database *c;
c = malloc(n * sizeof(database));
for(i=0; i<n; i++)
{
&c[i].x = i;
&c[i].y = i + 1;
}
return c;
}
int main(int argc, char *argv[])
{
int *x = p(5);
int i;
for(i=0; i<5; i++)
{
printf("%d|%d\n", &x[i].x, &x[i].y);
}
return 0;
}
Cerco di leggermi qualcos'altro...