Erreur programmation en C d'un mastermind

Fermé
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009 - 29 déc. 2009 à 13:19
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009 - 30 déc. 2009 à 08:50
Bonjour,
Je dois programmer un mastermind ors j'ai une erreur de segmentation lors de l'execution si vous pouviez m'aider.
Voila le code sources:

// Nicolas Alonzeau Mastermind test v1.0

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define NombreCouleurs
#define NombrePionts 4
#define COUPS 12

//variable globale
int i;
int plateau[COUPS];
int c[];

//srtuct !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef struct{
int combinaison[NombrePionts];
int bonne_pos;
int mauvaise_pos;
}Rangee;


int init_alea(int c[]);

int analyse(Rangee *jeu, int reef[]);
/*void affiche_historique(Rangeelignes[], int NombreCouleurs);*/

int main(void){

srand(time(NULL));
int switch_case, saisie;//Variable utilisée pour le switch case
int reference[NombrePionts];
do{
printf("Bonjour vous avez ouvert le mindmaster que voulez vous faire?");
printf("Tapez :\n 1:Jouer \n 2: Régle du jeu \n 3:Quitter\n");
scanf("%d", &switch_case);


switch (switch_case) {// Switch case cas 3 fin du programme cas 2 afficher les régles du jeu cas 1 jouer!
case 3 : break;
case 2 : printf("regle du jeu a ajouter");//régle du jeu
break;
case 1 : init_alea(reference[NombrePionts]);
for(i=0;i<=(NombrePionts-1);i++)
{
printf("%d",reference[i]); // use for debug
}
default: break; }// Fin du switch case
}while(switch_case==1||switch_case==2);
return 0;}

int init_alea(int c[]){
{
int i;
for(i=0;i<NombrePionts;i++) // Pour chaque pion
{
c[i]=rand()%8+1; // On choisis aléatoirement une valeur entre 1 et 8
}
/*
for(i=0;i<=NombrePionts-1;i++)
{
printf("%d ",tab[i]); // Cette partie affiche la combinaison. Utilisée lors du debug du programme
}
*/
}
}

et ce que le debugger DDD m'affiche :
http://www.hostingpics.net/viewer.php?id=107284erreur_mastermind_ddd.png
Malgré l'aide de DD je ne trouve pas. Merci d'avance
A voir également:

9 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 déc. 2009 à 13:33
hello
d'un rapide coup d'oeil, je vois
int c[];
et
c[i]=rand()%8....
ne manque-t-il pas de la mémoire pour c ?
0
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
29 déc. 2009 à 17:13
Salut,
il faut que tu définisses la taille de ton tableau c[]

tu utilises time mais tu ne déclares pas time.h .Ta fonction init_alea est censé renvoyée un entier mais elle renvoit rien. Si tu affectes directement la variable dans ton tableau où est l'intérêt de renvoyer quelque chose ? Si tu veux passer quelque chose pour l'affecter fais-le avec des pointeurs dans ton init_alea.
0
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
29 déc. 2009 à 19:25
Merci j'ai bien corrigé le probléme de la taille du tableau et la fonction ne renvoie plus rien.
Il persiste quand même une erreur de segmentation. Et un avertissement du debbuger que je ne comprend pas.
voila le code source;
// Nicolas Alonzeau Mastermind test v1.0

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <time.h>
#define NombreCouleurs
#define NombrePionts 4
#define COUPS 12
#define MAX 50


//variable globale
int i;
int plateau[COUPS];
int c[MAX];

//srtuct !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef struct{
int combinaison[NombrePionts];
int bonne_pos;
int mauvaise_pos;
}Rangee;


void init_alea(int c[]);

int analyse(Rangee *jeu, int reef[]);
/*void affiche_historique(Rangeelignes[], int NombreCouleurs);*/

int main(void){

srand(time(NULL));
int switch_case, saisie;//Variable utilisée pour le switch case
int reference[NombrePionts];
do{
printf("Bonjour vous avez ouvert le mindmaster que voulez vous faire?");
printf("Tapez :\n 1:Jouer \n 2: Régle du jeu \n 3:Quitter\n");
scanf("%d", &switch_case);


switch (switch_case) {// Switch case cas 3 fin du programme cas 2 afficher les régles du jeu cas 1 jouer!
case 3 : break;
case 2 : printf("regle du jeu a ajouter");//régle du jeu
break;
case 1 : init_alea(reference[NombrePionts]);
for(i=0;i<=(NombrePionts-1);i++)
{
printf("%d",reference[i]); // use for debug
}
default: break; }// Fin du switch case
}while(switch_case==1||switch_case==2);
return 0;}

void init_alea(int c[]){
{
int j;
for(j=0;j<NombrePionts;j++) // Pour chaque pion
{
c[j]=rand()%8+1; // On choisis aléatoirement une valeur entre 1 et 8
}
/*
for(i=0;i<=NombrePionts-1;i++)
{
printf("%d ",tab[i]); // Cette partie affiche la combinaison. Utilisée lors du debug du programme
}
*/
}
}

l'avertissement du compilateur est :
testv1.0.c:46: attention : passing argument 1 of ‘init_alea’ makes pointer from integer without a cast
quand a ddd il m'affiche toujours l'erreur au même endroit:
http://www.hostingpics.net/viewer.php?id=326432erreur_mastermind2.png
0
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
29 déc. 2009 à 19:25
Merci j'ai bien corrigé le probléme de la taille du tableau et la fonction ne renvoie plus rien.
Il persiste quand même une erreur de segmentation. Et un avertissement du debbuger que je ne comprend pas.
voila le code source;
// Nicolas Alonzeau Mastermind test v1.0

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <time.h>
#define NombreCouleurs
#define NombrePionts 4
#define COUPS 12
#define MAX 50


//variable globale
int i;
int plateau[COUPS];
int c[MAX];

//srtuct !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef struct{
int combinaison[NombrePionts];
int bonne_pos;
int mauvaise_pos;
}Rangee;


void init_alea(int c[]);

int analyse(Rangee *jeu, int reef[]);
/*void affiche_historique(Rangeelignes[], int NombreCouleurs);*/

int main(void){

srand(time(NULL));
int switch_case, saisie;//Variable utilisée pour le switch case
int reference[NombrePionts];
do{
printf("Bonjour vous avez ouvert le mindmaster que voulez vous faire?");
printf("Tapez :\n 1:Jouer \n 2: Régle du jeu \n 3:Quitter\n");
scanf("%d", &switch_case);


switch (switch_case) {// Switch case cas 3 fin du programme cas 2 afficher les régles du jeu cas 1 jouer!
case 3 : break;
case 2 : printf("regle du jeu a ajouter");//régle du jeu
break;
case 1 : init_alea(reference[NombrePionts]);
for(i=0;i<=(NombrePionts-1);i++)
{
printf("%d",reference[i]); // use for debug
}
default: break; }// Fin du switch case
}while(switch_case==1||switch_case==2);
return 0;}

void init_alea(int c[]){
{
int j;
for(j=0;j<NombrePionts;j++) // Pour chaque pion
{
c[j]=rand()%8+1; // On choisis aléatoirement une valeur entre 1 et 8
}
/*
for(i=0;i<=NombrePionts-1;i++)
{
printf("%d ",tab[i]); // Cette partie affiche la combinaison. Utilisée lors du debug du programme
}
*/
}
}

l'avertissement du compilateur est :
testv1.0.c:46: attention : passing argument 1 of ‘init_alea’ makes pointer from integer without a cast
quand a ddd il m'affiche toujours l'erreur au même endroit:
http://www.hostingpics.net/viewer.php?id=326432erreur_mastermind2.png
0

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

Posez votre question
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
29 déc. 2009 à 20:54
Ouais je te dis il faut que tu renseignes un pointeur tu crée une copie de la variable en faisant comme ça tu ne renseignes pas le champ générique j'ai zieuté vite fais donc à voir par rapport à un autre avis et je ne sais pas si ça marche dans l'idée de ce que tu veux faire

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define NombreCouleurs
#define NombrePions 4
#define COUPS 12

//variable globale
int i;
int plateau[COUPS];
int c[20];

//srtuct !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef struct
{
int combinaison[NombrePions];
int bonne_pos;
int mauvaise_pos;
}Rangee;


void init_alea(int *c);

int analyse(Rangee *jeu, int reef[]);


int main(void){

srand(time(NULL));

int switch_case;

int reference[NombrePions];

do
{
printf("Bonjour vous avez ouvert le mindmaster que voulez vous faire?");
printf("Tapez :\n 1:Jouer \n 2: Régle du jeu \n 3:Quitter\n");
scanf("%d", &switch_case);


switch (switch_case)
{
case 3 : break;

case 2 : printf("regle du jeu a ajouter");
break;

case 1 : init_alea(&reference[NombrePions]);

for(i=0;i<=(NombrePions-1);i++)
{
printf("%d",reference[i]);
}

default: break;
}
}
while(switch_case==1||switch_case==2);

return 0;
}

void init_alea(int *c)
{
int i;

for(i=0;i<NombrePions;i++) // Pour chaque pion
{
*c=rand()%8+1; // On choisis aléatoirement une valeur entre 1 et 8
}

for(i=0;i<=NombrePions-1;i++)
{
printf("%d ",tab[i]); // Cette partie affiche la combinaison. Utilisée lors du debug du programme
}
}
0
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
29 déc. 2009 à 20:57
Y'a sans doute des erreurs mais bon
0
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
29 déc. 2009 à 22:58
Yes ok merci beaucoup ça marche. enfin non ça n'a plus d'erreur de segmentation. Ba je vais essayer de le finir.
Juste un truc rand balance a chaque fois la même suite tu saurais pas pourquoi?
0
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
30 déc. 2009 à 02:56
Re, on me demande donc je fais en vitesse désolé :

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define NombreCouleurs
#define NombrePions 4
#define COUPS 12

//variable globale
int i;
int plateau[COUPS];
int c[20];

//srtuct !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef struct
{
int combinaison[NombrePions];
int bonne_pos;
int mauvaise_pos;
}Rangee;


void init_alea(int *c);

int analyse(Rangee *jeu, int reef[]);


int main(void){

srand(time(NULL));

int switch_case;

int reference[NombrePions];

do
{
printf("Bonjour vous avez ouvert le mindmaster que voulez vous faire?");
printf("Tapez :\n 1:Jouer \n 2: Régle du jeu \n 3:Quitter\n");
scanf("%d", &switch_case);


switch (switch_case)
{
case 3 : break;

case 2 : printf("regle du jeu a ajouter");
break;

case 1 :

for(i = 0; i <= (NombrePions-1);i++)
{
init_alea(reference+i);
}

for(i=0;i<=(NombrePions-1);i++)
{
printf("%d\n",reference[i]);
}

default: break;
}
}
while(switch_case==1||switch_case==2);

return 0;
}

void init_alea(int *c)
{
*c = rand()%8+1;
}
0
nicky973 Messages postés 5 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 08:50
Merci beaucoup ça fonctionne. Je continue a taffer dessus
0