Allocation dynamique de mémoire (°_°)

ceeno Messages postés 34 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 1 juillet 2007 - 20 nov. 2003 à 21:41
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 21 nov. 2003 à 15:02
Bonjour à tous,

Je cherche a crée un tableau dont j'augmente la mémoire à chaque fois que je veu y enregistrer une nouvelle valeur.
Mais je n'y arrive pas...
Voici ce ke je fais :

typedef struct cps
{
float val;
int nb;
} cps_t;

cps_t * VC;
VC=(cps_t *)malloc(sizeof(cps_t));
VC[k].val=0;
VC[k].nb=0;

Puis pour agrandir d'une case VC :
VC=(cps_t *)malloc(sizeof(VC)+1);

Si quelqu'un pouvait m'aider ca serais sympa!

Merci d'avance!

8 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
20 nov. 2003 à 21:42
Salut,
Avec realloc(...) non ?
0
ceeno Messages postés 34 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 1 juillet 2007
20 nov. 2003 à 21:43
Désolé, je me suis trompé de section, j'ai reposté dans Au secours, ce sujet peut donc etre éffacé.

Désolé!
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
20 nov. 2003 à 21:52
Salut,
Ma remarque sur la fonction realloc(...) tiens toujours.
0
ceeno Messages postés 34 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 1 juillet 2007
20 nov. 2003 à 21:54
Salut,
Merci pour ta réponse, mais il n'y a pas un moyen de le faire avec malloc ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
20 nov. 2003 à 21:57
Salut,
realloc est justement la pour t'eviter ca.
Tu passes en param le pointeur vers une zone deja allouée avec malloc(...), ainsi que la nouvelle taille de la zone.
0
ceeno Messages postés 34 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 1 juillet 2007
20 nov. 2003 à 22:03
Ok, mais en fait comme en cours je n'ai pas vu realloc, je pense que je ne doive pas m'en servir pour cette question.

En tout cas, merci pour ton aide !
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
20 nov. 2003 à 22:20
Salut,
Le prob avec malloc(...), c'est que quand tu alloues ta 2eme case, la 1eme est detruite. Avec realloc(...) non.

Sinon tu peux utiliser un tableau de pointeurs, mais il faudra connaitre la taille maxi de ton tableau a l'avance.
Je vois que ca comme techniques.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
21 nov. 2003 à 15:02
Pour augmenter la taille en n'utilisant que malloc :
- créer un nouveau tableau.
newtab = malloc((tabSize + 1) * sizeof(...))

- recopier les valeur de l'ancien tableau
for(i = 0; i < tabSize; i++)
newtab[i].field = tab[i].field;

-init nouvel élt
newTab[tabSize].fied = ...

- maj taille
tabsize++;

- détruire l'ancien tableau
free(tab);

- affecter le nouveu
tab = newtab;
0
Rejoignez-nous