cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006
-
30 mars 2005 à 20:59
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006
-
31 mars 2005 à 17:29
Bonjour,
J'aimerai faire un tableau de structure dynamique mais je galère.
Pour un tableau de int dynamique c'est bon. ex :
Là, le compilo me dit que j'essaie d'accéder à une valeur qui n'est pas une sructure ou qq chose comme ça.
Bref, est ce que qqu'un pourrait me dire si il est possible de faire ce genre de tableau, et si
oui, quelle est la bonne syntaxe ?
Note: Je ne veux pas faire de liste chainée, je préférerai le principe du tableau dynamique.
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006 31 mars 2005 à 09:32
Merci pour vos réponses, maintenant ça fonctionne ;-)
Toutefois, je viens de me rendre compte d'un autre problème.
Par exemple pour le tableau de int dynamique (voir plus haut), lorsque l'incrémentation de la boucle dépasse 23, le programme plante en disant que la mémoire ne peut être "writen" blablabla.
J'ai pensé à un pb avec la fonction realloc mais je suis pas sûr.
Est ce que vous auriez une idée ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 mars 2005 à 11:31
La méthode que tu as mise plus haut n'alloue aboluement pas un tableau d'entier, tu ne fait que réallouer un entier à chage fois (malloc et realloc (pTabInt, (sizeof (int)));)
et que tu stocke dans
pTabInt.
Donc quand tu veux accéder à un élément autre que
pTabInt[0]
tu tape à un endroit non alloué de la mémoire et donc plantage assuré au bout d'un moment.
La bonne méthode pour allouer un tableau d'entier (ou d'autre chose)
int size = 12
TRUC* p = malloc(12*sizeof(TRUC));
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006 31 mars 2005 à 13:06
OK, merci pour ton explication. Mais, pourrais tu me dire alors, comment
faire un tableau (de int par ex) vraiment dynamique, (cad dont on ne connaît
absolument pas la taille au départ), et auquel on peut allouer des éléments
au fur et à mesure selon les besoins lors de l'exécution du programme.
Tu vas certainement me parler des listes chainées, mais je voudrais garder
le concepte du tableau (qui je crois est plus rapide lors du listage).
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 mars 2005 à 14:19
Pour la première allocation :
TRUC* p = malloc(12*sizeof(TRUC));
pour les suivantes : p realloc(p, 13*sizeof(TRUC));> le contenu précédent est conservé (vérifier quand même le retour pour éviter de perdre p si NULL).
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006 31 mars 2005 à 15:14
J'ai adapté ton exemple dans la boucle de tableau de int (plus haut) mais le programme plante toujours avec la même erreur (la mémoire ne peut être "writen" blablabla).
Je ne comprends pas non plus pourquoi tu alloue 12 TRUC dès la 1ere allocation, un seul suffit non ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 mars 2005 à 15:18
J'ai mis 12 mais tu met ce que tu veux.
Autant allouer dès le nombre voulu pur faire ta boucle d'init (15, 23, on s'en fout).
Ensuite dans ton prog si tu te rend compte qu'il en fallait plus, tu fais un realloc.
int * pTabInt;
int iIndex;
pTabInt = malloc(15*sizeof(int));
for(iIndex = 0; iIndex < 15; iIndex++)
pTabInt[iIndex] = iIndex*2+5;