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 38 39 40 41
| typedef struct {
int *data;
size_t sz_alloc;
size_t sz_util;
} t_alloc;
int* stockAdresse(t_alloc *zone)
{
int nb;
int *tmp;
while(fscanf(stdin,"%d",&nb) != EOF)
{
// Si la taille utilisée atteint la taille allouée (ce qui arrive fatalement à la première itération puisque les valeurs sont à 0)
if (zone->sz_util == zone->sz_alloc)
{
// On agrandit la zone de X éléments
zone->sz_alloc+=X; // A toi de définir X (à 10, 100, 1000, même à 1 si tu veux faire du realloc ajusté)
// On fait une reallocation/allocation
tmp=realloc(zone->data, zone->sz_alloc * sizeof(int)); // Si zone->data vaut NULL (ce qui arrive fatalement à la première itération), realloc se comporte comme malloc
// Si l'allocation/reallocation a échoué on arrête tout (mais on n'oublie pas de libérer ce qui a été alloué)
if (tmp ==NULL)
{
free(zone->data);
zone->data=NULL;
return NULL;
}
// L'allocation/reallocation a réussi - On la sauvegarde
zone->data=tmp;
}
// Ici on a de la place pour stocker le nb lu et on incrémente le compteur des éléments stockés
zone->data[zone->sz_util++]=nb;
}
// La fonction a terminé - On lui fait renvoyer une valeur non nulle
return zone->data;
} |
Partager