dartal
Messages postés14Date d'inscriptionjeudi 25 septembre 2003StatutMembreDernière intervention12 février 2005
-
21 nov. 2004 à 17:59
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
23 nov. 2004 à 16:38
Bonjour ,
J'ai quelque problème de compréhension au niveau de la gestion des pointeurs ... j'ai essayé de me documenter un maximum en lisant des bouquins de C/C++ etc ... mais c'est encore très flou dans mon esprit ....
J'ai une question très simple qui me pose problème ...
Je voudrais que l'utilisateur d'un programme saisisse une série de commandes .... Je voudrais ensuite enregistrer toutes ces commandes dans un tableau ( à ce que j'ai compris , en C tableau = pointeur .... )
Le problème c'est que je ne sais pas du tout combien de commande l'utilisateur va saisir ....
Il faudrait donc que je déclare un tableau sans en connaitre le nombre d'élements ....
je me suis dis que ça serait ptet plus simple en faisant de l'arithmétique de pointeur ( mais ptet que je me plantes et qu' il y a plus simple )
Je suppose qu'il doit y avoir un rapport avec l'allocation de mémoire dynamique ( avec un malloc ou un calloc ) mais je vois pas trop comment m'y prendre .....
Est ce que kelk'un pourrait m'éclairer sur la déclaration de tableau avec un nombre d'élements indifinis ???
dartal
Messages postés14Date d'inscriptionjeudi 25 septembre 2003StatutMembreDernière intervention12 février 2005 21 nov. 2004 à 19:07
Tou d'abord merci de vos réponses .....
>qu'appelles-tu une commande? un nombre? un float ? un char*? un >char[]...?
En fait l'utilisateur doit rentrer un char* que je découpe à chaque espace ...
J'aimerais entrer les différentes mots entrés dans un tableau...
(chaque paramètre de la commande en fait )
>/* allocation dynamique */
>int *p;
>p = malloc( s * sizeof*p );
>free( p );
Le malloc m'allouera un espace mémoire de taille seulement , mais comment savoir le nombre d'élement p à allouer ???
( perso je peux pas savoir le nombre de commande que l'utilisateur va entrer )
Est que le malloc me permet vraiment de définir un espace mémoire ( un genre de tableau koi ) sans obligatoirement en connaitre la taille ????
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 21 nov. 2004 à 20:39
oui c'est possible
pour la lenteur, ca peut etre tres lent (en imaginant le pir)
si il n'y a pas assez d'espace memoire en contunuité, realloc fais un deplacement memoire de la zone (donc alllocation ailleur + copie, lent )
donc l'interet de realloc c'est de pouvoir reallouer (pour rallonger ou diminuer la taille d'une zone allouer) mais ca n'empeche pas d'utiliser une strategie de reallocation pour rester performant
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 21 nov. 2004 à 20:44
"deplacement memoire de la zone"
merci djl tu viens de répondre a une question que je me posais depuis des temps immémoriaux
sinon, si il n'y a qu'une seule char* entrée par l'utilisateur, pourquoi ne pas trouver le nombre d'espaces contenues dans cette chaine, ce qui donne le nombre de mots, puis allouer ta mem a partir de la, puis enfin de faire 'copier-coller' du char* a la meme allouée?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 21 nov. 2004 à 20:52
oui c'est possible, mais je crois que pour dartal une commande == les mots saisies (1 lignes) et que c'est justement le nombre de lignes (à saisir) qu'il ne sait pas combien il ne connait pas
pour le realloc et le deplacement memoir, c'est tres important, et c'est d'ailleur pour ca que realloc retourne un pointeur (qui est en fait l'adresse de la nouvelle zone allouer si necessaire)
il faut toujours ecrire
p = realloc( p, ... );
car la zone peut avoir changer d'adresse, d'ailleur tout autre pointeur contenant la valeur de p (ou une valeur décalé) avant le realloc est potentielement invalide
dartal
Messages postés14Date d'inscriptionjeudi 25 septembre 2003StatutMembreDernière intervention12 février 2005 22 nov. 2004 à 09:44
En fait pour moi une commande = un mot
C'est pour la création d'un mini-shell , l'utilisateur rentre un char* de type : " ls -l -i " etc ..... , je la découpe en mot ... mais je ne sais pas combien de paramêtre il peut rentrer.
Mais comme dit plus haut , il me suffit de faire un malloc de taille mon char* rentré par l'utilisateur ^-^
Le realoc est donc je suppose facultatif .....
( ça m'aura permis de comprendre comment gérer tout ça si on ne connais vraiment pas la taille ^^)