Tableau dynamique arduino [Fermé]

Signaler
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
-
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
-
Bonjour,
je cherche depuis au moins 3 h comment créer un tableau dynamique avec arduino mais je n'y parvient pas ...
pouvez vous m'aider
merci


2 réponses

Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
182
salut,

char* est une variable type pointeur qui pointe sur un char. en somme cette variable stocke une adresse mémoire où se situe le char.

char* tabchar=malloc(sizeof(char)*10);


là je viens de créer un tableau de 10 char. tabchar est un pointeur qui pointe vers le premier char de mon tableau. malloc est la fonction qui permet d'allouer la mémoire, elle prend en paramètre la taille à allouer et sizeof permet, t'as raison de savoir combien prend un char en mémoire. Donc sizeof(char)*10 me donne la taille mémoire de 10 char.

Contrairement en Java, on peut désallouer et libérer la mémoire comme on veut. Il faut juste faire très attention aux erreurs de segmentation et de bien vérifier que le tableau n'est pas pointé vers d'autres pointeurs. Pour la désallocation, il suffit d'utiliser la fonction free et mettre un pointeur en paramètre.

free(tabchar);


voilà mon tableau est désalloué, mes 10 char sont détruits et la mémoire peut être utilisée pour autre chose.

Pour la ré-allocation, donc ce qui t'intéresse pour faire ton tableau dynamique, faut utiliser realloc et lui donner en paramètre ton pointeur vers le tableau et la nouvelle taille.

char* tabchar_tmp=realloc(tabchar, sizeof(char)*20);
if(tabchar_tmp!=NULL){
tabchar=tabchar_realloc;
}


J'ai demandé d'augmenter mon tableau de char de 10 char de plus. J'ai pris soin de stocker la nouvelle adresse mémoire de cette ré-allocation dans une variable temporaire, car en effet la ré-allocation peut mal se passer où que la mémoire est remplie et que ce n'est plus possible d'ajouter. Je vérifie que l'adresse n'est pas à NULL puis seulement ensuite je l'affecte au pointeur tabchar.
Idem pour malloc, il faut aussi prendre soin de vérifier que l'allocation ait pu se faire coorectement en regardant juste après que tabchar ne soit pas à NULL. Ce ne sont que des conseils, tu verras dans la littérature ou des sites, que pas tous ne l'applique malheureusement.

char* tabchar;
if(tabchar=malloc(sizeof(char)*10)==NULL){
printf("Erreur dans l'allocation mémoire !");
return EXIT_FAILURE;
}
else{
//mon code ici
}


Un tuto bien expliqué en français dessus :
https://openclassrooms.com/courses/allocation-dynamique-en-c-complement

Qui ne tente rien n'a rien
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60859 internautes nous ont dit merci ce mois-ci

Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
182
en sachant que tu codes pour l'Arduino, dans mes exemples tu ne pourras pas utiliser certaines fonctions comme le printf, ou bien si tu utilises un petit écran LCD, faut voir dans ce cas la librairie de ton afficheur pour pouvoir afficher un message. Et je ne sais pas non plus pour EXIT_FAILURE sinon tu fais return -1; théoriquement il faut inclure la stdlib
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
42
GG je crois que c'est la meilleur explication que l'on m'ai donner sur ce forum ! je te remercie beaucoup !
je vais regarder de mon coté et je te dirais si j'ai encore besoin d'aide mais la ca devrais rouler
merci encore.
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
182
il y a pas de soucis
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
182
bonjour

tu devrais pouvoir utiliser les fonctions malloc, realloc et free du C
après suivant la version de l'IDE d'Arduino, tu peux utiliser les fonctions d'allocations mémoires du C++ (new, delete) mais je trouve plus simple avec du C

http://arduino.land/FAQ/content/4/26/en/how-to-use-dynamic-memory.htm
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
42
salut, merci de ta réponse , j' n'ai pas pu accéder au lien que tu ma envoyer. j'ai déjà regarder du coté de malloc ect .. mais je n'ai pas très bien compris son fonctionnement. déjà, quelle est la différence entre chat et char*. en suite je pense avoir compris que chaque type de variable utilise un certain nombre d'octet en mémoire et qe en utilisant la fonction sizeof(char) je peut savoir combien d'octet utilise un char et donc par la suite connaitre la taille de mon tableau (comme un mon_tableau.count en .net et autre)
merci.