IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme fonction d'initialisation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    cnam
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : cnam
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut probleme fonction d'initialisation
    bonsoir mes amis

    je suis en train d'écrire un programme de démineur il est pas complet encore mon problème est avec la fonction init qui initialise le tableau t de l ligne et c colonne avec m mines repartie aléatoirement
    erreur segmentation fault apparaît au niveau de cette fonction je ne peut pas détecter mon erreur
    peut être vous pouvez m'aider a la trouver
    merci beaucoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    #include <windows.h>
    #define droite 77
    #define gauche 75
    #define haut 72
    #define bas 80
    #define drapeau 32
    #define revele 13
    typedef struct
    {
        int x,y;
    } mycoord;
    void gotoligcol(int lig, int col)
     
    {
        COORD mycoord;
        mycoord.X = col;
        mycoord.Y = lig;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),mycoord);
    }
     
    typedef struct
    {
        char etat;
        int contenue;
    } t_case;
     
    void init(t_case **t,int l,int c,int m)
     
    {
        int mx,my,Compt,x,y;
        for(mx=0; mx<l; mx++)
        {
            for(my=0; my<c; my++)
            {
                t[mx][my].contenue=0;
     
            }
        }
        for (Compt=0; Compt<m; Compt++)
        {
            mx=rand()%l;
            my=rand()%c;
            if(t[mx][my].contenue==0)
            {
                t[mx][my].contenue=-1;
            }
     
            else
            {
                m++;
            }
     
     
        }
        for(mx=0; mx<l; mx++)
        {
            for(my=0; my<c; my++)
            {
                printf("%c",t[mx][my]);
            }
            printf("\n" );
        }
    }
     
    int nb_mines(t_case **t,int i, int j)
    {
        int N;
     
        if (t[i][j].contenue==-1)
        {
            gotoligcol(i,j);
            printf("BOOM, tu as perdu!!\n");
            printf("Voici la grille des mines\n");
     
            for(i=0; i<10; i++)
            {
                for(j=0; j<10; j++)
                {
                    printf("%c",t[i][j].contenue);
                }
                printf("\n" );
            }
            return (0);
        }
        else if (t[i - 1][j].contenue== -1) //compteur indiquant le nombre de mines à proximité
            N++;
        else if (t[i+ 1][j].contenue== -1)
            N++;
        else if (t[i][j -1].contenue== -1)
            N++;
        else if (t[i][j +1].contenue== -1)
            N++;
        else if (t[i - 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j + 1].contenue == -1)
            N++;
        else if (t[i - 2][j + 1].contenue == -1)
            N++;
        else
            N= 0;
        printf("%d",N);
        N=0;
    }
     
     
    void main()
    {
        char curseur,choix;
        int i,j,k,niv,l,c,m;
        int N_mine_around;
        t_case **t;
     
        printf("\n\t\t\t\tJEU   DEMINEUR\n\t\t\t\t--------------");
     
        printf("\n\n\t\t\t\t*** NIVEAU *** \n\n\t\t\t\t1.simplifiee\n\t\t\t\t2.normal\n\t\t\t\t3.dur\n\t\t\t\t4.personalisee\n\t\t\n\t\t\t\t\n\t\t\t\tChoix : ");
        scanf("%d",&niv);
        while(niv!=1 && niv!=2 && niv!=3 && niv!=4)     // Choix du niveau
        {
            printf("\nErreur de saisie , veuillez choisir un niveau : ");
            scanf("%d",&niv);
        }
        if (niv==1)
        {
            m=15;
            l=c=10;
        }
        else if (niv==2)
        {
            l=c=15;
            m=45;
        }
        else if (niv==3) // Détermine le nombre de mines par rapport au niveau
        {
            l=c=20;
            m=90;
        }
        else
        {
            printf("donner le nombre des lignes l:");
            scanf("%d",&l);
            printf("donner le nombre des colonnes c:");
            scanf("%d",&c);
            printf("donner le nombre des mines m:");
            scanf("%d",&m);
     
        }
        init(t,l,c,m);
     
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    Salut
    le code et assez long , commente le bien, et renomme bien les variables par des noms significatifs pour faciliter la détection de l'erreur, et indente le bien, pour une meilleur lisibilité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_case **t;// ou est l'allocation??
    tu dois allouer la mémoire pour la variable t.
    à quoi sert contenue, le 0 veut dire quoi et le -1 ??!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for ( Compt = 0 ; Compt < m ; Compt ++ )
         {
               mx = rand() % l ;
               my = rand() % c ;
               if( t[mx][my].contenue == 0 )
               {
    	          t[mx][my].contenue = -1 ;
               }
               else
               {
                   m++ ;
               }
         }
    une condition qui peut ne pas être atteint.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    int nb_mines(t_case **t,int i, int j)
    { 
        int N;
        if ( t[i][j].contenue == - 1 )
        {
            gotoligcol(i,j);
            printf("BOOM, tu as perdu!!\n");
            printf("Voici la grille des mines\n");
     
            for(i=0;i<10;i++)
           {
               for(j=0;j<10;j++)
               {
                printf("%c",t[i][j].contenue);
               }
              printf("\n" );
            }
            return (0);
        }
        else if (t[i - 1][j].contenue== -1) //compteur indiquant le nombre de mines à proximité
            N++;
        else if (t[i+ 1][j].contenue== -1)
            N++;
        else if (t[i][j -1].contenue== -1)
            N++;
        else if (t[i][j +1].contenue== -1)
            N++;
        else if (t[i - 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j + 1].contenue == -1)
            N++;
        else if (t[i - 2][j + 1].contenue == -1)
            N++;
        else
            N= 0;
        printf("%d",N);
        N=0;
    }
    ou est la valeur de retour de cette fonction si le bloc if n'est pas exécuté??

  3. #3
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    Citation Envoyé par b-med Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_case **t;// ou est l'allocation??
    tu dois allouer la mémoire pour la variable t.
    Pour un démineur aussi bien déclarer un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_case t[TAILLE][TAILLE]
    Petite remarque, habituellement on écrit les constantes en majuscule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define DROITE 77
    #define GAUCHE 75
    #define HAUT 72
    #define BAS 80
    #define DRAPEAU 32
    #define REVELE 13

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'ai indenté le code pour une meilleur lisibilité

    Pour savoir d'où vient l'erreur de segmentation, je recommande de passer l'exécutable dans http://www.developpez.net/forums/d12...light=drmemory

  5. #5
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Bonjour,

    Je suis du meme avis que b-med.
    Tu demandes a l'utilisateur de rentrer ses propres valeurs pour les lignes et colonnes => allocation dynamique de mémoire.
    Mais tu ne fais pas de malloc pour réserver l'espace pour ton tableau.
    Du coup, segmentation fault.

  6. #6
    Membre averti
    Homme Profil pro
    cnam
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : cnam
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Citation Envoyé par b-med Voir le message
    Salut
    le code et assez long , commente le bien, et renomme bien les variables par des noms significatifs pour faciliter la détection de l'erreur, et indente le bien, pour une meilleur lisibilité.

    salut tu a bien raison avec ça,je suis en train de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_case **t;// ou est l'allocation??
    tu dois allouer la mémoire pour la variable t.
    j'ai essayé différentes allocations mais aucun ne marche j’espère que j'alloc incorrectement
    je sais que je dois allouée deux fois une première pour le pointeur double et l'autre pour chaque élément du pointeur qui doit contenir une variable de type t_case définie dans la structure

    Citation Envoyé par b-med Voir le message
    à quoi sert contenue, le 0 veut dire quoi et le -1 ??!

    le -1 la case contenue un mine
    et le zero la case vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for ( Compt = 0 ; Compt < m ; Compt ++ )
         {
               mx = rand() % l ;
               my = rand() % c ;
               if( t[mx][my].contenue == 0 )
               {
    	          t[mx][my].contenue = -1 ;
               }
               else
               {
                   m++ ;
               }
         }
    une condition qui peut ne pas être atteint.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    int nb_mines(t_case **t,int i, int j)
    { 
        int N;
        if ( t[i][j].contenue == - 1 )
        {
            gotoligcol(i,j);
            printf("BOOM, tu as perdu!!\n");
            printf("Voici la grille des mines\n");
     
            for(i=0;i<10;i++)
           {
               for(j=0;j<10;j++)
               {
                printf("%c",t[i][j].contenue);
               }
              printf("\n" );
            }
            return (0);
        }
        else if (t[i - 1][j].contenue== -1) //compteur indiquant le nombre de mines à proximité
            N++;
        else if (t[i+ 1][j].contenue== -1)
            N++;
        else if (t[i][j -1].contenue== -1)
            N++;
        else if (t[i][j +1].contenue== -1)
            N++;
        else if (t[i - 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j + 1].contenue == -1)
            N++;
        else if (t[i - 2][j + 1].contenue == -1)
            N++;
        else
            N= 0;
        printf("%d",N);
        N=0;
    }
    ou est la valeur de retour de cette fonction si le bloc if n'est pas exécuté??
    cette fonction doit être exécutée pour chaque case elle teste les case entourant le case désirée et donne le nombre de mine adjacent a cette case


    Citation Envoyé par moins1 Voir le message
    Pour un démineur aussi bien déclarer un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_case t[TAILLE][TAILLE]
    Petite remarque, habituellement on écrit les constantes en majuscule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define DROITE 77
    #define GAUCHE 75
    #define HAUT 72
    #define BAS 80
    #define DRAPEAU 32
    #define REVELE 13
    bonsoir
    j'ai une exigence pour utiliser la structure t_case avec un pointeur double **t

  7. #7
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    Salut,
    pour l'allocation, tu dois faire quelque chose comme ça, c'est juste une idée vérifie bien le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    t_case **t;
    t = (t_case **)malloc(sizeof( *t_case ) * nbrColonne);
    for(int i = 0 ; i < nbrColonne ; i++)
    {
    	t[i] = (t_case *)malloc(sizeof(t_case) * nbrLigne);
    }
    pour cette fonction, croie moi, il ne marchera pas, il y a pas de valeur de retour si le bloc if ne s'exécute pas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    int nb_mines(t_case **t,int i, int j)
    { 
        int N;
        if ( t[i][j].contenue == - 1 )
        {
            gotoligcol(i,j);
            printf("BOOM, tu as perdu!!\n");
            printf("Voici la grille des mines\n");
     
            for(i=0;i<10;i++)
           {
               for(j=0;j<10;j++)
               {
                printf("%c",t[i][j].contenue);
               }
              printf("\n" );
            }
            return (0);
        }
        else if (t[i - 1][j].contenue== -1) //compteur indiquant le nombre de mines à proximité
            N++;
        else if (t[i+ 1][j].contenue== -1)
            N++;
        else if (t[i][j -1].contenue== -1)
            N++;
        else if (t[i][j +1].contenue== -1)
            N++;
        else if (t[i - 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j - 1].contenue == -1)
            N++;
        else if (t[i + 1][j + 1].contenue == -1)
            N++;
        else if (t[i - 2][j + 1].contenue == -1)
            N++;
        else
            N= 0;
        printf("%d",N);
        N=0;
    //ou est la valeur de retour dans les blocs esle if ou ici
    }
    l'instruction suivante n'est pas valide pur cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nbrMine = nb_mines( t , i ,   j )  ;
    tu sais pas ce que la fonction va retourner. Je vais dire encore, un retour est manquant

  8. #8
    Membre averti
    Homme Profil pro
    cnam
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : cnam
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    bonsoir les amies

    j'ai arriver a ce code beaucoup des problème résolue mais il me reste quelque truc ,est ce que vous pouvez m'aider
    merci beaucoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    #include <windows.h>
    #define droite 77
    #define gauche 75
    #define haut 72
    #define bas 80
    #define drapeau 32
    #define revele 13
    typedef struct
    {
    int x,y;
    }mycoord;
     
    void gotoligcol(int lig, int col)
     
    {  COORD mycoord;
        mycoord.X = col;
       mycoord.Y = lig;
       SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),mycoord);
    }
     
    typedef struct
    {
        int etat;
        int contenue;
    }t_case;
     
    void init(t_case **T,int L,int C,int M)
     
        {int Compt,X,Y,i,j;
    T=(t_case **)malloc(L*sizeof(t_case*));
    for(i=0;i<L+1 ;i++)
    T[i]=(t_case*)malloc(L*C*sizeof(t_case));
     
        for(i=0;i<L+1 ;i++)
    for(j=0;j<C+1 ;j++)
    {T[i][j].contenue=0;
     T[i][j].etat=0;
     
        }
     
     
     while(M)
        {
            X=rand()%L;//random(m);
            Y=rand()%C;//random(n);
     
              if(T[X][Y].contenue==0)
            {
                T[X][Y].contenue=-1;
                M--;
            }
            }
     
    }
     
    int verifMine(t_case **T,int x, int y,int L,int C) //vérifie dans le tableau mine si on tombe sur une mine ou non
    {
     
     
     
    int N_mine_around=0;
        if (T[x][y].contenue == -1)
        {
            system("cls");
            gotoligcol(x,y);
            printf("BOOM, tu as perdu!!\n");
            printf("Voici la grille des mines\n");
     
            for(x=0;x<L;x++)
           {
               for(y=0;y<C;y++)
               {
                printf("%c",T[x][y].contenue);
               }
              printf("\n" );
            }
            return (0);
        }
        else if (T[x - 1][y].contenue== -1) //compteur indiquant le nombre de mines à proximité
            N_mine_around++;
        else if (T[x+ 1][y].contenue== -1)
            N_mine_around++;
        else if (T[x][y -1].contenue== -1)
            N_mine_around++;
        else if (T[x][y +1].contenue== -1)
            N_mine_around++;
        else if (T[x - 1][y - 1].contenue== -1)
            N_mine_around++;
        else if (T[x + 1][y - 1].contenue == -1)
            N_mine_around++;
        else if (T[x + 1][y + 1].contenue == -1)
            N_mine_around++;
        else if (T[x - 2][y + 1].contenue == -1)
            N_mine_around++;
        else
            N_mine_around = 0;
        printf("%d", N_mine_around);
        N_mine_around=0;
    }
     
    int jouer(t_case **T,int L,int C) // fonction pour déplacer le curseur dans le tableau avec z,q,s et d
    {
    int x=1,y=1;
    int curseur;
    gotoligcol(x,y);
    while(curseur!=27){
    curseur=getch();
     
     
    switch(curseur)
    {t_case **T;
     
                   case  haut: x=x-1;y=y;gotoligcol(x,y);break;
                   case bas: x=x+1;y=y;gotoligcol(x,y);break;
                   case gauche : x=x;y=y-1;gotoligcol(x,y);break;
                   case droite :x=x;y=y+1;gotoligcol(x,y);break;
                   case drapeau :if (T[x][y].etat==0)printf("219");else if (T[x][y].etat==1)printf("%d",219);gotoligcol(x,y); /* pose ou enlève un drapeau */break;
                    case revele :if (T[x][y].etat == 0)
    {
                            //printf(" ");
                            gotoligcol(x,y);
                            verifMine(T,x,y,L,C);
                            break;
                   }
                            else
                            gotoligcol(x,y);
                            break;
                  // getch();
     
    }
                     if (x>L){
                     x=x-1 ; gotoligcol(x,y);}
                    else if (y>C){
                     y=y-1 ; gotoligcol(x,y);}   // Pour ne pas sortir du tableau de jeu !!
                    else if (y<1){
                    y=y+1 ; gotoligcol(x,y);}}
    }
     
     
     
     
    void main()
    {
     
    int i,j,k,niv,l,c,m,n=0;
    int N_mine_around;
    t_case **T;
     
       printf("\n\t\t\t\tJEU   DEMINEUR\n\t\t\t\t--------------");
     
       printf("\n\n\t\t\t\t*** NIVEAU *** \n\n\t\t\t\t1.simplifiee\n\t\t\t\t2.normal\n\t\t\t\t3.dur\n\t\t\t\t4.personalisee\n\t\t\n\t\t\t\t\n\t\t\t\tChoix : ");
       scanf("%d",&niv);
       while(niv!=1 && niv!=2 && niv!=3 && niv!=4)     // Choix du niveau
       {
        printf("\nErreur de saisie , veuillez choisir un niveau : ");
        scanf("%d",&niv);
        }
         if (niv==1)
        {
        m=15;
        l=10;c=10;
        }
        else if (niv==2)
        {
            l=15;c=15;
        m=45;
        }
        else if (niv==3) // Détermine le nombre de mines par rapport au niveau
        {l=20;c=20;
        m=90;
     
        }
        else
        {printf("donner le nombre des lignes l:");
        scanf("%d",&l);
        printf("donner le nombre des colonnes c:");
        scanf("%d",&c);
        printf("donner le nombre des mines m:");
        scanf("%d",&m);
     
        }
    init(T,l,c,m);
    system("cls");
    jouer(T,l,c);
     
    }

  9. #9
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    À la ligne 108, dans la fonction Jouer(), tu déclares une variable entière "curseur" mais tu ne l'initialise pas alors que tu t'en sers dans la boucle while() ligne 110.

    Toujours dans la fonction Jouer(), la ligne 115 ne sera jamais exécuté.

    Le prototype de la fonction Jouer() nous dit que la fonction retourne un entier alors que ce n'est pas le cas. Même chose pour VerifMine(). Aucun retour non plus dans la fonction main() et le prototype n'est pas bon. Ça devrait être:


    EDIT: Ta fonction Init() malloc sur une copie de l'adresse de **T. Enfin je ne sais pas trop comment expliquer sinon que c'est le même principe que si tu passe une simple variable à une fonction: c'est une copie. Le plus simple serait, dans Init(), de déclarer **T, d'allouer la mémoire et retourner T ou NULL si il y'a un problème.

    Sinon ça devrait être genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Init(t_case ***T, int L, int C, int M)
    {
        *T = malloc(sizeof(**T) * L); // Première dimension
        // Et là la 2 ième dimension
        // code
    }
    Dans ce style là m'semble.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  2. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  3. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52
  4. Réponses: 10
    Dernier message: 19/05/2004, 11h41
  5. fonction qui initialise a blanc zone de texte
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/11/2003, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo