Erreur programmation en C d'un mastermind

nicky973 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
nicky973 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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   Statut Contributeur Dernière intervention   92
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   92
 
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   Statut Contributeur Dernière intervention   92
 
Y'a sans doute des erreurs mais bon
0
nicky973 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   92
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup ça fonctionne. Je continue a taffer dessus
0