Voir la version complète : Erreur Tuto Sprite de Mokona
Bonjour, je suis actuellment entrain d'apprendre à me servir de la SDL (merci à Mokona pour ses tutos ils sont géniaux ^^).
Cependant arrivé au fichier sprites3.c j''obtiens 2erreurs lors de la compilation :
Dans la fonction GetRandom() :
[Warning] converting to `int' from `float'
et pour : oneSprite = malloc(sizeof(struct stSprite)); :
invalid conversion from `void*' to `stSprite*'
Je débute alors je ne sais pas pourquoi j'obtiens ces erreurs, quelqu'un peut-il m'aider ?
Merci
[Warning] converting to `int' from `float'
et pour : oneSprite = malloc(sizeof(struct stSprite)); :
invalid conversion from `void*' to `stSprite*'
Pour le Warning :
soit tu mets (float) devant ce qui pose problème, soit tu laisses tomber (c'est qu'un Warning, c mieux de le virer, mais ça pose pas problème)
Pour l'erreur, faut aussi caster (selon les compilos on doit ou pas le faire) :
oneSprite = (stSprite*)malloc(sizeof(struct stSprite));
Ah oui comme ça ca marche ^^!! merci pour la rapidité de la réponse :00000020: juste pour information à quoi sert le "(stSprite*)" avant le malloc ?
(zut, pwned juste quand je post :D)
Ptival a donc raison, cependant essaye de potasser l'allocation mémoire en C, c'est indispensable pour comprendre les tutoriaux.
Le cast en (stSprite*) permet de transformer ce que retourne la fonction malloc en stSprite*.
Car malloc a comme prototype void * malloc (size_t size);
à quoi sert le "(stSprite*)" avant le malloc ?
Ca sert à caster le retour du malloc :)
En fait malloc alloue le nombre de mémoire qu'on lui demande, et renvoie un pointeur vers cette mémoire, mais ce pointeur n'est pas typé (c'est un void*)
Seulement tu veux utiliser ce pointeur pour pointer vers une structure stSprite, donc tu castes le pointeur (tu changes son type) en pointeur de stSprite (stSprite*) comme ça ton compilo sais le tyep de données que pointe le pointeur ;)
malloc sert à allouer de la mémoire dynamiquement et il te retourne un pointeur vers la mémoire nouvellement allouée. Il te retourne ça sous forme d'un pointeur void*. Cela signifie qu'il pointe vers un type de donnees non connues. Pour certains compilateurs, il faut indiquer explicitement que ce pointeur pointe vers une donnée de type stSprite, d'ou ce qu'on appele le casting: (stSprite*) va convertir ton pointeur vide en un pointeur de type stSprite.
[EDIT] La on a fait très fort quand même !! Repondre tous en même temps :D. Au moins on est sûr que la réponse est complète [\EDIT]
hihi ^^ Merci vous tous, tout est claire maintenant (et tou marche alors que demander de plus ? lol)
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org