On me dit sur internet, que dans ce cas la, c'est la catastrophe, puisque je n'ai pas mis NULL a la fin des arguments. Et pourtant la valeur de length (ici 4,ce qui correspond à 5 arguments) est correct. (Le fait de rajouter NULL a la fin des arguments donne le meme résultat)
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 31 oct. 2004 à 21:02
Je ne vois pas non plus pourquoi ça marche...si même pourquoi ça compile : tu mets force_list(interaction *force...) dans virgule entre "force" et tes points de suspension O_o
---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 31 oct. 2004 à 21:46
Le fait que ca compile, c'est normal, puisque le code est correct. Mais faudrait quelqu'un qui connaisse comment est géré la mémoire lors du passage d'argument a une fonction. Autrement dis, est-ce que lors des passages d'arguments, il y a un NULL apres ceux ci pour signifier qu'il n'y en a pas d'autre. Je vois pas d'autres explications.
Mon livre sur l'assembleur parlait de ces passages d'arguments, mais il ne mentionne pas ce détail, donc il ne doit pas exister.
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 31 oct. 2004 à 23:25
dls, je sais ce que signifient les "..." mais ce que je ne comprends pas c'est l'absence de virgule entre eux et "force".
Par exemple printf est déclaré dans le genre :
void printf(char* str, ...);
et non :
void printf(char* str...);
Quant à la présence d'un NULL c'est clair que c'est pas logique...
Y'a un bon bouquin qui peut te détailler la convention d'appel C sous processeurs x86, là : http://www.drpaulcarter.com/pcasm/ (génial ce bouquin :)).
Enfin dans tous les cas je ne laisserais pas le code comme ça, parce que c'est pas dit que tous les compilos se comportent de la même manière...
A moins qu'un NULL soit placé automatiquement après les "..." par le compilo. Après tout pourquoi pas...ça serait pratique au fond :)
---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 nov. 2004 à 00:46
La fonction que j'ai mise ici n'est pas partielle. Vous avez du le remarquer, mais c'est un constructeur de la classe. Il initialise un tableau contenant les pointeurs sur tous les arguments passés en paramètres, ainsi que la longeur de ce tableau dans une autre variable.
Mais j'ai laisser tomber, je rencontrais des bugs de mémoires. Par exemple, un pointeur qui change d'adresse au cours de la fonction... bref. C'est bien ce que l'on me disait sur internet. Il faut éviter d'utiliser ce genre de passage d'arguments.
Merci pour votre aide, j'ai pris note du livre, je l'ai télécharger en pdf. Mais bon, tout en anglais ... :)
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 1 nov. 2004 à 15:08
Bonne résolution ^^
Pour le livre, c'est clai que c'est tout en anglais mais franchement ça vaut le coup, enfin c'est mon avis ;)
---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/