Bonjour,
je recontre en ce moment un phénomène que je qualifierai de paranormal dans une fonction c.Cette fonction sert à gérer les collisions entre des rect sdl.
ListeAnimal est une liste chainée (déclaré en pointeur) :
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct TCellAnimal { struct Animal ani; struct TCellAnimal *suc; }TypeCelluleAnimal; typedef TypeCelluleAnimal *ListeAnimal;
le soucis c'est que les printf donnent ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 ListeAnimal chercheCollision(ListeAnimal la) { ListeAnimal tmp = la; ListeAnimal tmp2 = la; for (tmp ; tmp != NULL ; tmp=tmp->suc) { printf("tmp ext : %d\n",tmp->ani.numeroAnimal); for (tmp2 ; tmp2 != NULL ; tmp2=tmp2->suc) { printf("tmp int : %d\n",tmp->ani.numeroAnimal); printf("tmp2 : %d\n",tmp2->ani.numeroAnimal); if (tmp->ani.numeroAnimal != tmp2->ani.numeroAnimal) { if (collisionEntreDeux(&tmp->ani,&tmp2->ani) == 1) { printf("collision !\n"); if (strcmp(tmp->ani.espece,tmp2->ani.espece) == 0 ) { //reste du code (assez long) } } } } } return la; }
tmp ext : 9
tmp ext : 8
tmp ext : 7
tmp ext : 4
tmp ext : 6
tmp ext : 5
tmp ext : 3
tmp ext : 2
tmp ext : 1
tmp ext : 10
tmp int : 10
tmp2 : 10
tmp int : 10
tmp2 : 9
tmp int : 10
tmp2 : 8
collision !
tmp int : 10
tmp2 : 7
tmp int : 10
tmp2 : 4
tmp int : 10
tmp2 : 6
tmp int : 10
tmp2 : 5
tmp int : 10
tmp2 : 3
collision !
tmp int : 10
tmp2 : 2
tmp int : 10
tmp2 : 1
tmp ext : 9
tmp ext : 8
tmp ext : 7
tmp ext : 4
tmp ext : 6
tmp ext : 5
tmp ext : 3
tmp ext : 2
tmp ext : 1
Le soucis c'est que le tmp reste le même à l'intérieur de la deuxième boucle ..
j'ai essayé avec des while, même résultats.
Alors soit c'est très bête et j'ai du mal avec mes yeux, soit c'est une histoire de pointeur un peu subtil!
Merci![]()
Partager