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

  FORUM HardWare.fr
  Programmation
  C++

  [C] pointeurs de pointeurs en retour de fonction...

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] pointeurs de pointeurs en retour de fonction...

n°377297
freeman_78
Posté le 29-04-2003 à 23:40:09  profilanswer
 

Bonjour !
 
Alors voilà, j'ai cette fonction :

Code :
  1. float *calculCoordX(const int nbreFigures, const int nbrePointsA, const int nbrePointsD, float *pointsDepartX, float *pointsArriveeX)
  2. {
  3. int i,j;
  4. float **coordX = (float **) malloc( nbrePointsA * sizeof(float) );
  5. for(i=0 ; i<nbreFigures ; i++)
  6. {
  7.  coordX[i] = (float *) malloc( nbreFigures * sizeof(float) );
  8. }
  9. for( i=0 ; i<nbrePointsD ; i++ )
  10. {
  11.  for( j=0 ; j<nbreFigures ; j++ )
  12.  {
  13.   coordX[i][j] = pointsDepartX[i];  }
  14. }
  15. return coordX;
  16. }


 
et puis dans mon main j'ai :

Code :
  1. int main(void)
  2. {
  3. float **coordXcalculs;
  4. ...
  5. coordXcalculs = calculCoordX(nbreFigures,nbrePointsA,nbrePointsD,pointsDepartX,pointsArriveeX);
  6. ...
  7. }


 
Le problème c'est que quelque part je fais un truc qui va pas au niveau du return de la première fonction puisque j'ai un warning ... moi je veux retourner l'adresse du pointeur double (l'adresse de mon tableau à 2 dimensions quoi) et la mettre dans "float **coordXcalculs" du main... quelqu'un pourrait-il m'aider ?
 
D'autre part j'ai une erreur dans la première boucle for, alors si jamais au passage vous voyez ce qui peut clocher dans cette boucle ... :)
 
D'avance merci !

mood
Publicité
Posté le 29-04-2003 à 23:40:09  profilanswer
 

n°377313
SquiZZ
Posté le 29-04-2003 à 23:55:30  profilanswer
 

d'après une lecture rapide du code, tu ne devrais pas avoir que ca comme erreurs, tu peux poster les warnings et le erreurs que le compilo te sort ?
 
[edit] j'ai jeté le code dans mon compilo,
en changeant le prototype de la fonction de  

Code :
  1. float *calculCoordX(const int nbreFigures, const int nbrePointsA, const int nbrePointsD, float *pointsDepartX, float *pointsArriveeX)


en ça :

Code :
  1. float **calculCoordX(const int nbreFigures, const int nbrePointsA, const int nbrePointsD, float *pointsDepartX, float *pointsArriveeX)


 
ca compile.
 
maintenant, en changeant ça :

Code :
  1. float **coordX = (float **) malloc( nbrePointsA * sizeof(float) );


en ça :

Code :
  1. float **coordX = (float **) malloc( nbrePointsA * sizeof(float*) );


c'est un petit peu plus correct (a mon gout) après c'est vous qui voyez.


Message édité par SquiZZ le 30-04-2003 à 01:03:02
n°377423
freeman_78
Posté le 30-04-2003 à 07:44:26  profilanswer
 

merci !
mais pour le return je return quoi ? comme j'ai mis ? et dans le main c'est bon aussi mon ptit bout de code ?
 
merci d'avance !

n°377434
SquiZZ
Posté le 30-04-2003 à 08:21:32  profilanswer
 

le return doit être bon,
dans tes boucles for, fais gaffe aux paramètres que tu utilises.
tu es sûr que c'est bon quand tu fais un malloc(nbrePointsA * sizeof(float*) et qu'ensuite tu va jusqu'a nbrePointD dans ton deuxième for ?

n°377635
freeman_78
Posté le 30-04-2003 à 10:16:08  profilanswer
 

dans le 2è malloc en effet je crois que je dois mettre nbPoints et non nbFigures ... j'essaierai en rentrant, je te dis si ça marche :)
merci de l'observation !!

n°378063
freeman_78
Posté le 30-04-2003 à 13:04:24  profilanswer
 

oki ça marche très bien maintenant...
 
en fait le premier malloc il définit quelle dimension de mon tableau à 2 dimensions final ? en disant qu'on a tableau[dimension1][dimension2] ...
 
C'est là où je me suis embrouillé !
 
Merci de tes réponses !! [:je%40nb]

n°378130
philou_a7
\_o&lt; coin ! &gt;o_/
Posté le 30-04-2003 à 13:46:19  profilanswer
 

Y a un truc que j'aime pas dans ton code, c'est que la mémoire est allouée dans t afonction et qu'elle doit etre liberée à l'exterieur par l'appelant :\
 
C'est pas très propre ;)
 
Il vaut mieux faire les malloc, appeler la fonction avec les pointeurs alloués passés en parametre, et liberer après traitement.
 

Code :
  1. int calculCoordX(const int nbreFigures, const int nbrePointsA, const int nbrePointsD, float *pointsDepartX, float *pointsArriveeX, float *TableauResultat)


Avec juste un code retour d'erreur en retour (parce que là, si ton malloc vautre par exemple tu fais comment ?)
 
Les malloc et les free correspondants devraient (tant que faire ce peut) toujours etre dans le même bloc de programme. Pour la relecture c'est 50000 fois mieux.

n°379235
freeman_78
Posté le 01-05-2003 à 10:05:39  profilanswer
 

Oui en effet j'avais pensé à faire les malloc dans le main... je vais faire come ç !
 
 
Sinon tu saurais répondre à mes ptites questions du message juste avant ? :)
 
Merci d'avance !

n°380490
freeman_78
Posté le 02-05-2003 à 15:43:01  profilanswer
 

freeman_78 a écrit :

oki ça marche très bien maintenant...
 
en fait le premier malloc il définit quelle dimension de mon tableau à 2 dimensions final ? en disant qu'on a tableau[dimension1][dimension2] ...
 
C'est là où je me suis embrouillé !
 
Merci de tes réponses !! [:je%40nb]  


 
S'il vous plait une ptite réponse, je suis perdu et je n'arrive pas à bien voir le fonctionnement : est-ce qu'on définit en premier la dimension la plus intérieure ou la plus extérieure ?
 
merci :)
 
on pourrait dire [:ark] mais je l'ai déjà fait et là dessus y'a pas énormément d'explications ... :/

n°380647
philou_a7
\_o&lt; coin ! &gt;o_/
Posté le 02-05-2003 à 17:44:05  profilanswer
 

Alors si je me souviens bien.... ( c'est le type même de la question piege le coup du [][] :lol: )
 
tab[i][j] = (tab[i])[j]
tab[i] est un int*
(faut raisonner en terme d'operateurs si je ne m'abuse)
 
d'où :  
pour allouer un tableau int test[i][j] :

Code :
  1. int **test;
  2. test = (int **) malloc ( sizeof(int *) * nombre_max_de_i )
  3. for(i de 0 à nombre_max_de_i-1)
  4.   test[i] = (int *) malloc ( sizeof(int) * nombre_max_de_j )


 
faut commencer par l'exterieur
 
mais bon, un petit essai sur un bout de code sera surement plus efficace que ma memoire defaillante ( j'aime paaaaas les tableaux de tableaux :lol: )

mood
Publicité
Posté le 02-05-2003 à 17:44:05  profilanswer
 

n°382396
theshockwa​ve
I work at a firm named Koslow
Posté le 05-05-2003 à 10:34:37  profilanswer
 

philou_a7 a écrit :

Alors si je me souviens bien.... ( c'est le type même de la question piege le coup du [][] :lol: )
 
tab[i][j] = (tab[i])[j]
tab[i] est un int*
(faut raisonner en terme d'operateurs si je ne m'abuse)
 
d'où :  
pour allouer un tableau int test[i][j] :

Code :
  1. int **test;
  2. test = (int **) malloc ( sizeof(int *) * nombre_max_de_i )
  3. for(i de 0 à nombre_max_de_i-1)
  4.   test[i] = (int *) malloc ( sizeof(int) * nombre_max_de_j )


 
faut commencer par l'exterieur
 
mais bon, un petit essai sur un bout de code sera surement plus efficace que ma memoire defaillante ( j'aime paaaaas les tableaux de tableaux :lol: )


 
 
ben ... Perso, ca me semble correct ... :D


---------------
last.fm
n°383601
freeman_78
Posté le 05-05-2003 à 23:46:05  profilanswer
 

okioki c'est bien ça  [:bigsmiley]  
 
merci à vous pour les réponses !!
 
pourvu ke ça dure :)
 [:ultraglab]


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

  [C] pointeurs de pointeurs en retour de fonction...

 

Sujets relatifs
kkun pourrait m'expliker comment marche cette fonction kbhit ? PHP : creation d'une fonction a nombre de parametres variables ?
[C] copier un fichier de données formatées via une fonction externe...[PHP/JS] Grande chaine de car dans une fonction js.
[C] probleme avec fonction system()[vb(a)] je veux faire fonction qui separe une chaine de char en deux
[XML + DOM] fonction writetofile() ne marche pasfonction mail() probleme avec la gestion des emails non envoyé
Besoin d'aide sur la fonction "formulaire"[asp / vbs] Appeler une fonction...
Plus de sujets relatifs à : [C] pointeurs de pointeurs en retour de fonction...


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