Langage C: probleme pour un projet

Fermé
loulou17 - 28 nov. 2003 à 21:59
 karimovy - 27 mars 2007 à 12:47
Bonjour a tous. Déja je voudrais dire un grand merci, car le forum m'a beaucoup aidé il fut un temps.... La j'ai un petit probleme de programmation. je dois faire un jeu de dame chinoise en C, et j'ai un gros probleme de mémoire. En fait pour le jeu j'utilise des matrices (pion ** matrice de char) et des listes chainées. A chaque tour j'alloue une nouvelle liste chainée, une nouvelle matrice, pour mes opérations internes. Et je sais pas si windows aime bien tout ce traffic d'allocation(malloc) de mémoire et de libération (free).
Voila si quelqu'un aurait une idée... normalement je libere bien la mémoire, je l'alloue bien.... les bugs ne sont pas réguliers... et ils dépendent également des machines!
bon merci d'avance et bon courage a tous!
A voir également:

31 réponses

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
28 nov. 2003 à 22:10
salut, quel genre de bug tu as? on ne peut rien te dire tant q l'on ne connait pas les bugs.
Sinon, pour commencer, enleves tous les free et remets les un a un pour voir lequel provoque un bleme, si bien sur c'est un segmentation fault.
Et puis si tu as assez de memoire, les mallocs se realiseront correctement, ne t'en fait pas, je pense qu'au minimum, ils ont respecte le comportement attendu de la librairie standard C, sinon ce serait la catastrophe.

tafiscobar
0
Voila en gros la structure principale:
typedef enum
{
HORS=' ',
SPACE=' ',
LIBRE='.',
JOUEURA='a',
JOUEURB='b',
JOUEURC='c',
JOUEURD='d',
JOUEURE='e',
JOUEURF='f',
COUPOSS='x',
}pion;


ma fonction d'alloc :

plateau=(pion**)malloc(H*sizeof(pion*));
for(i=0;i<H;i++)
{
//allocation de chaque 'ligne' de la matrice plateau
plateau[i]=(pion*)malloc(L*sizeof(pion));

liberation:

void LibereMat(pion*** mat, int taille)
{
int i,h;

//si c'est d'une matrice carree dont il s'agit
if(taille == TMAT)
h=taille;

//sinon c'est le plateau
else
h=H;


for(i=0;i<h;i++)
free((*mat)[i]);

free(mat);

Pour la liste chainée:

void LibereCell(CoupPoss * c)
{
CoupPoss * temp;
temp=c;

if(c->suiv!=NULL)
{
while(c->suiv!=NULL)
{
c=c->suiv;
free(temp);
temp=c;
}
}

free(c);
c=NULL;
}

Voila plus de précision sur le bug: alors pas de segmentation fault, ca compile bien, ca execute et au cours du jeu, j'ai une erreur windows.
Merci en tout cas pour la réponse rapide!
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
28 nov. 2003 à 22:36
c'est quoi l'erreur?
de plus, ds la fct liberecell, tu as du code inutile, ceci est plus propre, enleves les if et autres, aucune utilite :
while ( c != NULL) {
tmp = c;
c = c->suiv;
free (tmp);
}


tafiscobar
0
je vois pas d'erreur non plus, mais dev c++ plante bien!!
et comme a l'école on utilise dev c je suis obligé de me taper cette daube!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
signature de l'erreur:
AppName: projet.exe AppVer:0.0.0.0 ModName: ntdll.dll
ModVer:5.1.2600.1217 Offset 00008e20

voila les données du rapport d'erreurs...
je sais pas du tout ce que ca veut dire :'(
0
Je note: "for(i=0;i<h;i++)" Drôle de façon d'écrire sa boucle sans ouvrir un bloc.
0
Je note: 5 blocs ouverts dont 3 fermés
0
euh ??? quand tu parles de bloc tu parles de bloc mémoire ou bloc de code??
0
{
/* ceci est un bloc */
}
0
si c'était ca le probleme je n'arriverai meme pas a executer!
0
Et le morceau de boucle tu trouves cela normal qui traine sans bloc?
0
euh j'ai pas donné les fonctions en entier!!! c'est pour ca. si tu veux je te passe les 500 lignes !! et tu veras que j'ai bien fermé tous mes blocs
0
for(i=0;i<h;i++) // c'est le 2e du code
{ // c'est ça qui est louche et qui manque

} // puis aussi ça

/* puis y a aussi du texte qui traine au milieu mais je ne pense que tu compiles le texte sans le mettre entre /* texte */
0
Si tu copiais le texte des erreurs je pourrais éventuellement faire une traduction rapide pour savoir ce qui cloche.
0
signature de l'erreur:
AppName: projet.exe AppVer:0.0.0.0 ModName: ntdll.dll
ModVer:5.1.2600.1217 Offset 00008e20

voila... en fait ce n'est pas une erreur de compilation, mais une erreur lors de l'execution.
0
Et comment tu sais que c'est ce morceau de code qui cloche alors?
0
j'ai suivi votre conversation,bien que je ne sois pas experten la matiere,j'aimerais bien voir ce code en entier.
0
pour le code je veux bien te le passer mais bon c'est blindé. environ 700 lignes.. en tout cas j'ai supprimé pas mal d'alloc dynamique, pour une matrice et une liste chainée, que j'allouais a chaque tour de jeu.
je travaille maintenant de préférence avec une matrice en dur pion mat[][]; et je me passe de la liste chainée.
résultat ca bug toujours mais beaucoup plus loin dans le jeu.
donc voila... on va essayé de faire l'IA pour voir ou ca bug plus précisément....
landry si tu veux le code il faudrait que tu me passe une adresse mail ou je sais pas... tu as msn messenger??
0
voila les deux fonctions d'alloc et de free que je garde:


CoupPoss * AlloueCell(int l,int c)
{
CoupPoss * cp;

cp=(CoupPoss * )malloc(sizeof(CoupPoss));

//si il n'y a pas de problemes d'allocation
if(cp)
{
cp->coorLig=l;
cp->coorCol=c;
cp->suiv=NULL;
}

//si probleme d'allocation cp=NULL
return cp;
}





void LibereCell(CoupPoss * c)
{
CoupPoss * temp;
temp=c;

//c toujours different de NULL car il y'a la cellule du pion selectionne

while(c->suiv!=NULL)
{
c=c->suiv;
temp->suiv=NULL;
free(temp);
temp=c;
}


free(c);
c=NULL;
}



et la structure de liste chainée:



typedef struct _CoupsPoss //liste chainee qui stockera tous les coups possibles pour un pion selectionne
{
int coorLig;
int coorCol;
struct _CoupsPoss * suiv;
} CoupPoss;




voila bon courage pour trouver mes éventuelles erreurs merci d'avance!
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
30 nov. 2003 à 16:56
bob, arretes de faire le connaisseur, ce n'est pas un bleme d'accolades, sinon il ne compilerait pas.
loullou, l'erreur ne me dit rien, d'ailleurs il n'est dit que les numeros, nom du module et du projet, rien d'autre.
Sincerement, je ne vois pas le bleme avec le code (theoriquement, je n parle pas de l'algo, on p faire mieux). Le bleme viendrait d'une autre partie du code, moi je n'ai pas le temps de lire le code, par contre envoies le a landry, elle pourra trouver l'erreur peut etre.

tafiscobar
0
Vu que tu ne propose rien de mieux alors au lieu de dire "arrete de faire le connaisseur" propose des solutions. Moi j'offre mon aide ni plus ni moins.
0