PDA

Voir la version complète : Erreur Tuto Sprite de Mokona


Zhell
14/07/2005, 13h49
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

Ptival
14/07/2005, 13h55
[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));

Zhell
14/07/2005, 14h03
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 ?

LXS
14/07/2005, 14h05
(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.

LXS
14/07/2005, 14h06
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);

Ptival
14/07/2005, 14h07
à 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 ;)

Ced666
14/07/2005, 14h09
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]

Zhell
14/07/2005, 14h17
hihi ^^ Merci vous tous, tout est claire maintenant (et tou marche alors que demander de plus ? lol)