Tableau dynamique arduino

Fermé
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 - 2 oct. 2015 à 19:38
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 3 oct. 2015 à 14:15
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

totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 3/10/2015 à 12:59
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
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 3/10/2015 à 13:10
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
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 43
Modifié par dj naoki le 3/10/2015 à 13:18
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.
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
3 oct. 2015 à 14:15
il y a pas de soucis
0