Malloc help

damage123 Messages postés 70 Statut Membre -  
damage123 Messages postés 70 Statut Membre -
Bonjour,

Je tourne sous ubuntu 10.04, j'ai un programme qui fonctionne bien, en tout cas j'ai pas d'erreur a la compilation, meme pas de warning (en utilisant g++ -Wall) et puis a l'execution j'ai une erreur de malloc, je ne vois pas d'ou ca peut venir, parce que a aucun moment j'utilise la fonction malloc, j'utilise par contre new donc voila l'erreur que j'obtient a l'execution du programme :

| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
---------------

joueur 1 veuillez entrer votre coup :
1
ligne : 1
Puissance4: malloc.c:3096: sYSMALLOc: Assertion '(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Abandon

donc le programme s'execute correctement jusqu'a "ligne : 1" et après y'a l'erreur ...
sous ubuntu il plante après la premiere validation du premier chiffre par contre quand j'ai tester le meme programme sous windows, il marche mais plante au bout du 3 eme tour de boucle ... je ne comprend pas x)

merci d'avance de votre aide

6 réponses

loupius Messages postés 789 Statut Membre 148
 
Salut,
Si tu ne donnes pas le code, je crains que personne ne pourra donner une réponse adéquate.
0
Gaunts Messages postés 1390 Statut Membre 116
 
Salut,

Effectivement il faudrait ton code..
Essaie de compiler avec -ansi -pendantic
0
flo13142 Messages postés 74 Statut Membre 18
 
Salut,

Ce que tu décris ressemble à un écrasement en mémoire. En gros tu écris quelque part à un endroit ou tu n'as pas le droit. Exemple tu as un tableau de 10 cases tu écris à la 11 éme.
Du coup en fonction de ton environnement d'exécution tu ne plantes pas au même endroit.
Mais en effet le plus simple est de poster ton code.
0
damage123 Messages postés 70 Statut Membre 6
 
http://darties.hd.free.fr/MainSite/uploads/Teaching/ITC34_puissance4.zip

voila le code, y'a une erreur dans le fichier Plateau.h ligne 12, y'a un point virgule en trop a la fin de ligne.

désolé j'ai oublier de le poster ^^'

Je compile le tout avec un make file dont le contenu est :

Puissance4 : main.o Plateau.o Jeton.o Joueur.o Partie.o  
 g++ -Wall main.o Plateau.o Jeton.o Joueur.o Partie.o -o Puissance4  

Joueur.o : Joueur.cpp Joueur.h  
 g++ -Wall -c Joueur.cpp  

Jeton.o : Jeton.cpp Jeton.h  
 g++ -Wall -c Jeton.cpp  

Plateau.o : Plateau.cpp Plateau.h Jeton.h  
 g++ -Wall -c Plateau.cpp  

Partie.o : Partie.cpp Plateau.h Jeton.h Joueur.h  
 g++ -Wall -c Partie.cpp  

main.o : main.cpp Partie.h Plateau.h Jeton.h Joueur.h
 g++ -Wall -c main.cpp  
0

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

Posez votre question
loupius Messages postés 789 Statut Membre 148
 
Je n'ai pas de problème, ni à la compilation ni à l'exécution ;)
Quelques points à revoir:
int Plateau::ajouterJeton(char c, int col)
{
  col %= 7;  // permet de normaliser col entre 0 et 6

Il serait judicieux de ne pas utiliser directement les nombres pour comparer avec le nombre de lignes ou de colonne; il vaut mieux définir:
#define LIG 6
#define COL 7
Par exemple:
bool Plateau::grillePleine()
{
  int i = 0;
  while ((i < COL) && (grille[LIG-1][i] != NULL))
    i++;
  return (i == COL);
}
Cela est plus lisible et surtout cela permet de pouvoir aisément définir des jeux ayant d'autres dimensions.

  if (grille[i][j] != NULL && grille[i][j+1] != NULL && gril ...
peut se simplifier en:
  if (grille[i][j] && grille[i][j+1] && gril ..
Bonne continuation.
0
damage123 Messages postés 70 Statut Membre 6
 
enfaite la compilation passe sans soucis, mais c'est l'execution qui foire quelques part
0