Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1314 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Allocation dynamique et fonction.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Allocation dynamique et fonction.

n°368555
koude
Posté le 22-04-2003 à 16:42:24  profilanswer
 

Je voudrais faire une allocation dynamique pour un tableau dans une fonction et pouvoir ensuite remplir ce tableau dans le main.
 
Mon problème c'est qu'à la fin d'une fonction, toute les fariables de cette fonction sont détruites donc je voit pas comment faire pour pouvoir travailler dans le tableau en dehors de la fonction.
Si kkun peut me donné un coup de pousse pour savoir quels variable je doit passé en paramètre à cette fonction etc...
J'ai déjà essayer en déclarant un pointeur dans le main, en le passant à la fonction d'allocation et en faisant l'allocation sur ce pointeur en gros : (mais ça plante qd je veux affiché *pt ds le main)
 

Code :
  1. // dans le main
  2. int *pt ;
  3. fct alloc (pt);
  4. //ds la fct
  5. pt = (int*)calloc (taille, sizeof(int));


Message édité par koude le 22-04-2003 à 16:48:24
mood
Publicité
Posté le 22-04-2003 à 16:42:24  profilanswer
 

n°368572
Taz
bisounours-codeur
Posté le 22-04-2003 à 16:53:33  profilanswer
 

tu peux donner unv rai bout de code s'il te plait

n°368576
koude
Posté le 22-04-2003 à 16:57:22  profilanswer
 

Code :
  1. void main (void)
  2. {
  3. int *pt;
  4. fct_alloc(pt);
  5. printf ("%d",*pt);
  6. }
  7. void fct_alloc (int *pt)
  8. {
  9. do
  10. {
  11. pt =(int*) calloc (4,sizeof (int))
  12. if (!pt)
  13. {
  14. printf ("\n" );
  15. printf ("==> Erreur d'allocation, appuyer sur unne touche pour recommencer : <==\n" );
  16. getch ();
  17. }
  18. }
  19. }


Message édité par koude le 22-04-2003 à 17:14:11
n°368591
Taz
bisounours-codeur
Posté le 22-04-2003 à 17:09:48  profilanswer
 

ben il te manque un niveau d'indirection, alors tu ne peux pas récupérer le résultat de ta fonction alloc
 
pour faire simple, vois le fonctionne de malloc

Code :
  1. void* malloc(size_t n)
  2. {
  3.   void *ptr=NULL;
  4.   ptr=appel_systeme_specifique();
  5.   return ptr;
  6. }


 
 
et un passage par pointeur
 

Code :
  1. void doit(int *i)
  2. {
  3.   *i=;
  4. }
  5. int entier;
  6. doit(&i)


 
je crois que tu ferais bien de t'acheter un bouquin de C

n°368601
koude
Posté le 22-04-2003 à 17:15:38  profilanswer
 

++Taz a écrit :

ben il te manque un niveau d'indirection, alors tu ne peux pas récupérer le résultat de ta fonction alloc


 
Ca veut dire koi ?  :??:  
 

n°368604
Deaddy
Posté le 22-04-2003 à 17:18:21  profilanswer
 

pour faire simple, fait retourner ton pointer par ta fonction:
 
int * fct_alloc()
{
...
return pt;
}

n°368606
koude
Posté le 22-04-2003 à 17:20:49  profilanswer
 

Deaddy a écrit :

pour faire simple, fait retourner ton pointer par ta fonction:
 
int * fct_alloc()
{
...
return pt;
}
 


 
Et dire que j'y ai pensé  :sarcastic:  mais je l'ai pas fait !!!
 
Merci


Message édité par koude le 22-04-2003 à 17:21:37
n°368721
theshockwa​ve
I work at a firm named Koslow
Posté le 22-04-2003 à 18:40:53  profilanswer
 

ou alors :
 

Koude a écrit :

Code :
  1. void main (void)
  2. {
  3. int *pt;
  4. fct_alloc(&pt);
  5. printf ("%d",*pt);
  6. }
  7. void fct_alloc (int **pt)
  8. {
  9.   do
  10.   {
  11.     *pt =(int*) calloc (4,sizeof (int))
  12.     if (!*pt)
  13.     {
  14.       printf ("\n" );
  15.       printf ("==> Erreur d'allocation, appuyer sur unne touche pour recommencer : <==\n" );
  16.       getch ();
  17.     }
  18.   }
  19. }




 
:D


---------------
last.fm
n°368760
belgique
Posté le 22-04-2003 à 19:11:08  profilanswer
 

Pour voir si j'ai pas oublié mon C:

Code :
  1. void fct_alloc (int & *pt)
  2.   {
  3. ....
  4. }


C'est bon aussi?

n°369279
theshockwa​ve
I work at a firm named Koslow
Posté le 23-04-2003 à 11:24:51  profilanswer
 

Belgique a écrit :

Pour voir si j'ai pas oublié mon C:

Code :
  1. void fct_alloc (int & *pt)
  2.   {
  3. ....
  4. }


C'est bon aussi?


 
perdu ... Les références, c'est C++, pas C .... :D


---------------
last.fm
mood
Publicité
Posté le 23-04-2003 à 11:24:51  profilanswer
 

n°369316
belgique
Posté le 23-04-2003 à 11:50:35  profilanswer
 

Ah ben, j'ai confondu mais en c++ ça doit être bon alors? :p

n°369369
theshockwa​ve
I work at a firm named Koslow
Posté le 23-04-2003 à 13:21:04  profilanswer
 

non ... En c++, il me semble que ce n'est pas correct ...
 
Tu dois préciser les indirections avant la référence, il me semble ...
 
ca te donne : void fct_alloc (int *&pt) {...}


---------------
last.fm
n°369371
belgique
Posté le 23-04-2003 à 13:22:48  profilanswer
 

en effet  :)  

n°370468
BifaceMcLe​OD
The HighGlandeur
Posté le 24-04-2003 à 14:47:57  profilanswer
 

Koude a écrit :


Ca veut dire koi ?  :??:  


En C, les paramètres de fonction sont toujours en entrée. On passe toujours des copies des paramètres d'appel. Pour pouvoir modifier la valeur d'un paramètre de manière durable (i.e. la modification survit à la sortie de la fonction), il faut en fait passer un pointeur sur la valeur que l'on veut faire modifier à la fonction.
 
Dans ton cas, ce que tu veux modifier, c'est une valeur de type pointeur sur int, puisque tu alloues un tableau dentiers. Donc le paramètre de la fonction doit être un pointeur sur pointeur sur entier.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Allocation dynamique et fonction.

 

Sujets relatifs
Verif date JS - formulaire dynamique avec des [crochets][JS / VBS ? ] Fonction pour executer un programme ?
[JS] Demande de signification de fonctionappliquer une fonction à toutes les valeurs d'un tableau... [résolu]
[PHP] parse error au début d'une fonction ...1 variable global changée dans une fonction garde sa nouvelle valeur?
[ASP VB VS.NET] bon tutorial pour construire un controle dynamique ?Fonction "bkgrnd" dans curses.h
Fonction sur les dates[HTML]comment faire un calendrier dynamique et récupérer les valeurs
Plus de sujets relatifs à : [C] Allocation dynamique et fonction.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR