Tableau en C
Résolu/Fermé
hunter_civ
Messages postés
9
Date d'inscription
jeudi 8 octobre 2020
Statut
Membre
Dernière intervention
27 octobre 2020
-
Modifié le 13 oct. 2020 à 23:41
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 14 oct. 2020 à 18:00
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 14 oct. 2020 à 18:00
A voir également:
- Tableau en C
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
7 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 14 oct. 2020 à 13:23
Modifié le 14 oct. 2020 à 13:23
Un truc de ce genre-là :
int object_nb; char **objects_list char info[80]; object_nb = 0; //Initialisation (la variable info vient d'etre renseignée) objects_list[object_nb] = (char*) malloc(strlen(info)+1); strcpy(objects_list[object_nb],info); object_nb++; //On ajoute une nouvelle case (info a été mise à jour) objects_list = (char**) realloc(objects_list,(object_nb+1)*sizeof(char*)); if(objects_list != NULL) { objects_list[object_nb] = (char*) malloc(strlen(info)+1); strcpy(objects_list[object_nb],info); object_nb++; } //et ainsi de suite .... //Ne pas oublier de libérer la mémoire allouée à la fin ! unsigned short k; if(object_nb != 0) { for(k = 0;k < object_nb;k++) free(objects_list[k]); free(objects_list); objects_list = NULL; object_nb = 0; }
luckydu43
Messages postés
3965
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
16 décembre 2024
980
Modifié le 14 oct. 2020 à 09:06
Modifié le 14 oct. 2020 à 09:06
Bonjour
Si c'est comme en Java (et y a moyen), un tableau est défini par son type et sa taille.
On ne peut donc pas ajouter un élément à un tableau se trouvant à un indice plus grand que la taille du tableau lui-même.
Si c'est comme en Java (et y a moyen), un tableau est défini par son type et sa taille.
On ne peut donc pas ajouter un élément à un tableau se trouvant à un indice plus grand que la taille du tableau lui-même.
- Solution à éviter (c'est très lourd !) : Il faut alors copier tout le contenu du tableau dans un autre tableau plus grand et enfin ajouter ton élément.
- Solution à privilégier : utiliser un autre conteneur de données comme une liste ou une collection.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
14 oct. 2020 à 10:54
14 oct. 2020 à 10:54
Bonjour,
autre solution: faire de l'allocation dynamique de mémoire
avec malloc et realloc
Et là, on ajoute des éléments au tableau au fil de l'eau ...
autre solution: faire de l'allocation dynamique de mémoire
avec malloc et realloc
Et là, on ajoute des éléments au tableau au fil de l'eau ...
hunter_civ
Messages postés
9
Date d'inscription
jeudi 8 octobre 2020
Statut
Membre
Dernière intervention
27 octobre 2020
14 oct. 2020 à 14:27
14 oct. 2020 à 14:27
Bonjour à tous,
Merci pour ces réponses, je ne connaissais pas le principe d'allocation dynamique, il faut que j'étudie un peu pour comprendre ton code Phil_1857.
Petite question, avec cette allocation dynamique, il est possible de retourner un tableau en sorti de fonction?
Encore merci!
Merci pour ces réponses, je ne connaissais pas le principe d'allocation dynamique, il faut que j'étudie un peu pour comprendre ton code Phil_1857.
Petite question, avec cette allocation dynamique, il est possible de retourner un tableau en sorti de fonction?
Encore merci!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
14 oct. 2020 à 16:53
14 oct. 2020 à 16:53
hunter_civ,
Quand on commence à se plonger dans les pointeurs et pointeurs de pointeurs en C,
il y a intérêt à rester concentré ! (faire un petit schéma sur papier éventuellement)
Sinon, oui, on peut retourner un tableau en sortie ...
Quand on commence à se plonger dans les pointeurs et pointeurs de pointeurs en C,
il y a intérêt à rester concentré ! (faire un petit schéma sur papier éventuellement)
Sinon, oui, on peut retourner un tableau en sortie ...
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
14 oct. 2020 à 17:35
14 oct. 2020 à 17:35
Justement on peut retourner un tableau en sortie parce qu'il est dynamique. Un tableau statique local lui ne peut pas être retourné. Un tableau dynamique peut être retourné car on ne fait que transmettre un pointeur sur la mémoire réservée, il reste à la charge de celui qui reçoit le pointeur de l'utiliser comme tableau et ne pas oublier de finir en libérant la mémoire allouée.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
14 oct. 2020 à 18:00
14 oct. 2020 à 18:00
C'est bien ça, on retourne un pointeur ...
14 oct. 2020 à 14:15
Il est préférable de stocker le résultat de realloc() dans une variable intermédiaire et de n'écraser le pointeur contenu dans objects_list que si le résultat est différent du pointeur NULL.
Autrement, en cas d'échec de realloc(), tu as perdu le pointeur vers les données accumulées jusque là et ton programme ne peut plus y accéder ni libérer cette mémoire.
14 oct. 2020 à 16:49
Tu as parfaitement raison
C'était juste pour donner le principe à Hunter_civ ( La réponse de luckydu43 laisse à penser qu'il connait plus Java ...)