Des listes en C..

Des listes en C.. - C - Programmation

Marsh Posté le 16-06-2012 à 13:25:43    

Bonjour!
 
Je travaille actuellement sur un projet en C consistant à créer un petit jeu de nim (sous forme de damier).
Bref, nous devons donc travailler avec des listes et pointeurs.
 
J'ai crée une fonctions permettant d'afficher la liste des cases adjacentes d'un pion donné sauf que voilà j'ai un petit soucis.
Tout se compile parfaitement, mais plantage complet à l'exécution. J'ai donc truffé le code de balises pour localiser et voilà ce qui en sort :
 
http://img826.imageshack.us/img826/7941/listes.jpg
 
Uploaded with ImageShack.us
 
Voici la structure de la liste :

Code :
  1. #ifndef TYPE_LISTE
  2. #define TYPE_LISTE
  3. struct cellule
  4.   { int li,co;
  5.     struct cellule * suivant;
  6.   };
  7. typedef struct cellule Cellule;
  8. typedef Cellule * Liste;
  9. #endif


 
En fait, je ne fais qu'allouer de la mémoire pour une variable de type liste et voilà que le champ li contient par défaut une valeur..
En regardant des exos déjà fait, je vois qu'on peut simplement déclarer :
Liste L;
ou encore :
Liste L=NULL;
 
Seulement j'ai essayé, là le programme plante instantanément.
Je ne comprends pas...
 
Si vous pourriez m'apporter des précision à ce sujet, je vous en serai reconnaissante!
Merci d'avance

Reply

Marsh Posté le 16-06-2012 à 13:25:43   

Reply

Marsh Posté le 16-06-2012 à 13:33:00    

Vu que le bout de code que tu montres en image n'est pas l'endroit ou ça plante, que l'on n'a pas ton code, et que nos boules de cristal n'ont pas la puissance nécessaire, il n'est pas possible de te dire les raisons du plantage.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-06-2012 à 14:49:27    

Non mais dans ce cas là ce ne plante pas, je voudrais juste savoir pourquoi en créant juste une variable de type Liste, il y a dans le champ li une valeur..

Reply

Marsh Posté le 16-06-2012 à 17:13:11    

Ça veut dire quoi pour toi "en créant juste une variable de type Liste"?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-06-2012 à 17:15:27    

Liste L=(Liste)malloc(sizeof(Cellule));
Ce qu'il y a sur le screen

Reply

Marsh Posté le 16-06-2012 à 19:21:37    

Eh bien ton malloc associe une zone mémoire à L, en lui donnant la valeur de l'adresse de cette zone mémoire.
Mais cette zone mémoire est donnée en l'état, les octets dedans ont déjà des valeurs, et ça va induire des valeurs pour les champs de ta cellule.
Pour pallier à cela, après allocation,  
- soit tu met à 0 (ou une valeur de convention) tes champs
- soit tu utilises calloc, qui  met à 0 les octets de la zone allouée
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-06-2012 à 20:24:19    

D'accord, merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed