Malloc help
damage123
Messages postés
70
Statut
Membre
-
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
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
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.
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.
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 :
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je n'ai pas de problème, ni à la compilation ni à l'exécution ;)
Quelques points à revoir:
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:
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 7Par 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.