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 :

Pas mal de problemes avec les pointeurs de tableaux


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut Pas mal de problemes avec les pointeurs de tableaux
    Bonjour, en continuant à ecrire mon programme aujourd'hui, je tombe sur un gros probleme qui me décourage un peu.

    Je suis en train de faire un puissance 4 à allocation de mémoire dynamique, où la hauteur peut monter à l'infinie.
    J'ai déjà ecrit tout l'algo sur papier, donc je sais à peu pres ce que je vais ecrire dans le programme.

    C'est un programme test, donc toutes les fonctions sont dans le même fichier, je m'y prend toujours de cette manière pour coder, l'algo sur papier, un programme test, et une fois que tout marche nickel, ben là je separe les fonctions dans des fichiers différents etc, enfin je fais un truc
    plus propre.

    Bref, en ecrivant mon code, je voulais tester si ma fonction verification horizontale de la grille marchait bien, donc j'ai voulu à la main dans le code, mettre des 'O' un peu partout, par exemple p4[4][3]='O', et lors de la compilation, j'ai une erreur :s

    Avec l'utilisation des pointeurs j'ai du mal à me ballader dans mon tableau, à faire des tests.

    J'ai aussi remarquer que lorsque je fais *p4='O', ça me remplit automatique tous le tableau avec des O :s

    Bref, voilà le code :

    code

    J'ai aussi fait une ebauche d'une fonction poserpion, où lorsque le pion serait tout en haut d'une colonne, en utilisant realloc, on augmente la grille de 10 lignes. Mais bon ça n'a pas l'air de marcher

    ebauche du code poserpion :

    code

    Merci d'avance pour vos aides ou conseils éventuels.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut

    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
    char *creer_grille(int col,int lignes) {
     
       int i,j;
     
       char *p4=malloc(lignes*sizeof(*p4));
       if(p4==NULL) exit(0); // exit(EXIT_FAILURE);
     
       for(i=0;i<lignes;i++)
          p4=malloc(col*sizeof(*p4)); //FAUX : p4[i]=malloc(col*sizeof(*p4[i])); if(p4[i]==NULL) exit(EXIT_FAILURE)
     
         for(i=0;i<lignes;i++)
          for(j=0;j<col;j++)
             *p4=' '; /*  FAUX  :*p4[i][j]=' '; 
     
    return p4; }

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Pourquoi deux malloc pour le même pointeur ?

    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
    char *creer_grille(int col,int lignes)
    {
        int i,j;
        
        char *p4=malloc(lignes*sizeof(*p4));
        if(p4==NULL)
            exit(0);
            
        for(i=0;i<lignes;i++)
            p4=malloc(col*sizeof(*p4));
            
        for(i=0;i<lignes;i++)
            for(j=0;j<col;j++)
                *p4=' ';
                
        return p4;
    }
    Si c'est pour créer un tableau dynamique à 2 dimensions, ce n'est pas du tout comme ça.
    Jettes un oeil la dessus : http://c.developpez.com/faq/c/?page=...bleau_2D_alloc

    [EDIT] Mince, encore grillé [/EDIT]
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par crocodilex
    Mince, encore grillé
    pour une fois que je suis le 1e à répondre...

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par salseropom
    pour une fois que je suis le 1e à répondre...
    OK, mais ta correction est incomplete et même fausse
    Profites en pour regarder le lien sur la FAQ que j'ai donné.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par crocodilex
    OK, mais ta correction est incomplete et même fausse
    Profites en pour regarder le lien sur la FAQ que j'ai donné.
    oups... j'ai fait un mauvais copier coller


  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Merci pour vos réponses.

    Apres avoir suivi tes corrections j'ai des erreurs à la compilation :

    retest.c: In function `main':
    retest.c:89: warning: passing arg 1 of `free' makes pointer from integer without a cast
    retest.c: In function `creer_grille':
    retest.c:109: error: invalid type argument of `unary *'
    retest.c:109: warning: assignment makes integer from pointer without a cast
    retest.c:110: warning: comparison between pointer and integer
    retest.c:114: error: subscripted value is neither array nor pointer

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il faudrait le code actualisé de retest.c
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    voilà le code :

    code

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    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
    char *creer_grille(int col,int lignes) {
     
       int i,j;
     
       char *p4=malloc(lignes*sizeof(*p4));
       if(p4==NULL) exit(EXIT_FAILURE);
     
       for(i=0;i<lignes;i++)
          p4[i]=malloc(col*sizeof(*p4[i])); // p4[i] est un char, ne peut pas être un pointeur
       if(p4[i]==NULL) exit(EXIT_FAILURE);// p4[i] est un char, NULL est un pointeur
     // tester les retours de malloc dans la boucle for
         for(i=0;i<lignes;i++)
          for(j=0;j<col;j++) 
             p4[i][j]=' '; // p4[i] est un char, on ne peut pas mettre des [] à un char 
    return p4; }
    La déclaration de p4 est en cause. On devrait avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char **creer_grille(int col,int lignes) {
    ...
    char **p4=malloc(lignes*sizeof *p4);
    et idem pour p4 dans main
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    P4 est un tableau de lignes pointeurs sur char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **p4=malloc(lignes*sizeof(*p4));
    Chaque case de ce tableau contient l'adresse (un pointeur) d'un tableau de col char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p4[i]=malloc(col*sizeof(p4[i]));
    Chaque élément (char) de ces tableaux est initialisé par un ' '
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    J'ai l'impression de ne pas bien comprendre.

    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
     
     
    char **creer_grille(int col,int lignes) {
     
       int i,j;
     
       char **p4=malloc(lignes*sizeof(*p4));
       if(p4==NULL) exit(EXIT_FAILURE);
     
       for(i=0;i<lignes;i++)
          p4[i]=malloc(col*sizeof(p4[i]));
       if(p4[i]==NULL) exit(EXIT_FAILURE);
     
         for(i=0;i<lignes;i++)
          for(j=0;j<col;j++) 
             p4[i][j]=' '; 
     
    return p4; }

    Si j'ai bien compris, on a un pointeur p4 qui pointe vers un pointeur (un tableau de i cases) où chaque case pointe à leur tour vers p4[i]

    Pointeur *p4 [___] pointe vers => pointeur p4 [__][__][__][__]
    => pointent | | | | | | | |
    p4[0] p4[1] p4[2] p4[3]

    Donc,

    /* On alloue 'lignes' cases (octets) à p4 donc si lignes = 6 notre tableau sera de taille p4[6].

    [ p4[0] ] [p4[1] ][ p4[2] ][ p4[3] ][ p4[4] ][ p4[5] ]

    char **p4=malloc(lignes*sizeof(*p4));


    /* On veut maintenant des colonnes, donc chaque i cases de p4[6] se verra allouer 'col' cases donc si colonnes = 3 :

    [ p4[0] ] [ p4[1] ] etc etc
    / \ / \
    p4[1] p4[2] p4[3] p4[1] p4[2] p4[3] */


    p4[i]=malloc(col*sizeof(p4[i]));


    Ai je bien compris le principe? Si oui comment acceder par exemple à la deuxieme ligne de la deuxieme colonne? Comme un tableau 2d classique? p4[2][2] ?

    p.s : Toujours des erreurs lors de la compile
    p.s2: code updaté : http://rafb.net/p/OrNRX131.html

  13. #13
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    La structure est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char**     ________ char * _____________________________________ 
     p4 ->     p4[0]        p4[1]        p4[2]    .... p4[lignes-1]
                |           |            |
                V           V            V
            | p4[0][0]   p4[1][0]   p4[2][0]
     char   | p4[0][1]   p4[1][1]   p4[2][1]
            | p4[0][2]   p4[1][2]   p4[2][2]
    ......
            | p4[0][col-1]......
    p.s : Toujours des erreurs lors de la compile
    Tu pourrais nous les donner, ca simplifie!
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    erf, j'ai completement oublié de c/c les erreurs, désolé.

    retest.c: In function `main':
    retest.c:49: warning: assignment from incompatible pointer type
    retest.c:89: warning: passing arg 1 of `free' makes pointer from integer without a cast

    p.s : Merci pour les explications

  15. #15
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    A la réponse #10, j'ai écrit
    et idem pour p4 dans main
    Dans main , p4 doit également être un char**
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    Je n'ai plus d'erreur, par contre maintenant ma fonction afficher grille ne m'affiche plus rien.

    Et lorsque je veux le debugger à posant un bp à partir de la fonction afficher j'ai directement un return 1.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    char **creer_grille(int,int);
    void afficher_grille(char *,int,int);
    int verifgrille(char *p4,int colonnes,int lignes,char *joueuractuel);
     
     
    int main (void) {
     
       char joueur,joueur2;
       char *joueuractuel=NULL; /* Pointeur joueuractuel vers joueur */
       int choix,nmbrerandom,JEU=1,CHOIXVALIDE=1;  /* nmbrerandom pour la fonction random */
       int colonnes,lignes=6;
       char **p4=NULL;
     
         /* Menu du jeu */
     
       while(CHOIXVALIDE) { /* Operateur logique boolen, tant que choixvalide != 0, on relance le menu */
       printf("\nSelectionnez le type de partie souhait\n\n");
       printf("-> Humain vs Humain : 1\n");
       printf("-> Humain vs CPU : 2\n");
       printf("-> CPU vs CPU : 3\n\n");
     
       printf("Votre choix : ");  
       scanf("%d",&choix);
     
     
       switch(choix) {
          case 1:
             joueur='O',joueur2='X',CHOIXVALIDE=0;
             break;
          case 2:
             joueur='O',joueur2='S',CHOIXVALIDE=0;
             break;
          case 3:
             joueur='S',joueur2='T',CHOIXVALIDE=0;
             break;
          default:
             break; } } 
     
       /* Fin Menu du jeu */
     
       /* Creer la grille */
     
        printf("\nNombre de colonnes :  ");
       scanf("%d",&colonnes); 
     
      p4=creer_grille(colonnes,lignes);
     
       /* fin de creer la grille */
     
     
     /* random qui renvoie 0 ou 1 et determine le joueur qui commence */
     
       srand(time(NULL));    /* On initialise le gnrateur de nombre alatoires */
       nmbrerandom=(rand() % 2);
       if(nmbrerandom==0)  
          joueuractuel=&joueur; 
       joueuractuel=&joueur2; 
     
     
     
       /* fin random */
     
       /* Debut de la boucle */
     
       while(JEU) {  /* Operateur logique JEU , tant que JEU != 0 (que personne n'a gagn) on continue le jeu */ 
     
     
          afficher_grille(*p4,colonnes,lignes); /* Affichage de la grille */
     
          int i,j;
     
     
     
     
          int condition= verifgrille(*p4,colonnes,lignes,joueuractuel); /* test si qqn a gagn */
          if(condition == 1) printf("gagne");
          printf("perdu\n");  
     
    /* Liberation de la mmoire */
     
          for(i=0;i<lignes;i++) 
             free(p4[i]); 
          free(p4);
     
    /* Fin liberation de la mmoire */
     
          return 0; } }
     
     
    /* Debut des fonctions */
     
    /* Fonction crer grille */
     
    char **creer_grille(int col,int lignes) {
     
       int i,j;
     
       char **p4=malloc(lignes*sizeof(*p4));
       if(p4==NULL) exit(EXIT_FAILURE);
     
       for(i=0;i<lignes;i++)
          p4[i]=malloc(col*sizeof(p4[i]));
       if(p4[i]==NULL) exit(EXIT_FAILURE);
     
         for(i=0;i<lignes;i++)
          for(j=0;j<col;j++) 
             p4[i][j]=' '; 
     
    return p4; }
     
    /* Fonction Afficher grille */
     
    void afficher_grille(char *p4,int colonnes,int lignes) {
     
       int i,j;
     
       for(i=0;i<lignes;i++) {
          printf("\n");
          for(j=0;j<colonnes;j++)
             printf("| %c ",*p4); } 
       printf("\n");
       for(i=0;i<colonnes;i++)
          printf("%3d ",i);
       printf("\n\n"); }
     
    /* Fonction Verifier Grille */
     
    int verifgrille(char *p4,int colonnes,int lignes,char *joueuractuel) {
     
     
       /* verif horizontale */
     
    int compteur=0;
     int i,j;
     
     for(i=(lignes-1);i>=0;i--) { 
        if(compteur==4) {
           printf("Celui qui a les pions %c a gagn\n",*joueuractuel);
           return 1; }
        else  compteur=0;
        for(j=0;j<colonnes;j++) {
           if(compteur==4) {
              printf("Celui qui a les pions %c a gagn\n",*joueuractuel);
             return 1; }
           if(*p4 != *joueuractuel) compteur=0;
           else  compteur++; } } 
     
    /* verif verticale */ 
     
     compteur=0;
     
     for(j=0;j<colonnes;j++) {
        if(compteur==4) {
      return 1; }
        else compteur=0;
        for(i=(lignes-1);i>=0;i--) {
           if(compteur==4) {
              printf("Vous avez gagn\n");
              return 1; }
           if(*p4 != *joueuractuel) compteur=0;
           else compteur++; } }
     
     
    return 0;
    }
     
     
    /* Fin des fonctions */

  17. #17
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il faut adapter la fonction à la nouvelle définition de p4 :
    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
       while(JEU) {  /* Operateur logique JEU , tant que JEU != 0 (que personne n'a gagn) on continue le jeu */       
          afficher_grille(p4,colonnes,lignes); /* Affichage de la grille */
          ...........
    void afficher_grille(char **p4,int colonnes,int lignes) {
       
       int i,j;
       
       for(i=0;i<lignes;i++) {
          printf("\n");
          for(j=0;j<colonnes;j++)
             printf("| %c ",p4[i][j]); } 
       printf("\n");
       for(i=0;i<colonnes;i++)
          printf("%3d ",i);
       printf("\n\n"); }
    et revoir également en conséquence la fonction verifgrille
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    J'avais essayé ça mais malheureusement ça me fait exactement la même chose, ça compile bien, mais lors de l'execution le tableau ne s'affiche pas.

    En debuggant sous gdb :

    (gdb) b 114
    Breakpoint 1 at 0x804880e: file retest.c, line 114.
    (gdb) r
    Starting program: /home/angel_killah/retest

    Selectionnez le type de partie souhait

    -> Humain vs Humain : 1
    -> Humain vs CPU : 2
    -> CPU vs CPU : 3

    Votre choix : 1

    Nombre de colonnes : 7

    Program exited with code 01.
    (gdb)

    p.s : code

  19. #19
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Fais attention, il reste des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char *creer_grille(int col,int lignes) {
     .....
       for(i=0;i<lignes;i++)
          p4[i]=malloc(col*sizeof(*p4[i])); // p4[i] est un char, ne peut pas être un pointeur
       if(p4[i]==NULL) exit(EXIT_FAILURE);// p4[i] est un char, NULL est un pointeur
     // tester les retours de malloc dans la boucle for
    Le test de p4[i] DOIT être dans la boucle for sinon, il porte sur p4[lignes]qui n'a pas été alloué
    Elimine les incohérences
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main (void) {
    ....
       if(nmbrerandom==0)  
          joueuractuel=&joueur; 
       joueuractuel=&joueur2;
    ....
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 31
    Points
    31
    Par défaut
    En faite c'est l'allocation de mémoire malloc dans la fonction creer_grille qui ne marche 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
    /* Fonction crer grille */
     
    char **creer_grille(int col,int lignes) {
     
       int i,j;
     
       char **p4=malloc(lignes*sizeof(*p4));
       if(p4==NULL) { printf("L'allocation n'a pas marché\n"); }
     
       for(i=0;i<lignes;i++)
          p4[i]=malloc(col*sizeof(p4[i]));
       if(p4[i]==NULL) printf("Alloc");
     
         for(i=0;i<lignes;i++)
          for(j=0;j<col;j++) 
             p4[i][j]=' '; 
     
    return p4; }
    et ça me retourne lors de l'execution :

    bash-3.1$ a.out

    Selectionnez le type de partie souhaité

    -> Humain vs Humain : 1
    -> Humain vs CPU : 2
    -> CPU vs CPU : 3

    Votre choix : 1

    Nombre de colonnes : 7
    Alloc
    | | | | | | |
    | | | | | | |
    | | | | | | |
    | | | | | | |
    | | | | | | |
    | | | | | | |
    0 1 2 3 4 5 6

    perdu


    EDIT : Ah, on a posté en même temps, merci je vais voir ça.

Discussions similaires

  1. probleme avec les pointeurs
    Par solitaire2010 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/06/2010, 13h42
  2. un 'petit' probleme avec les pointeurs
    Par gss3000 dans le forum C++
    Réponses: 4
    Dernier message: 04/01/2010, 15h39
  3. Problem avec les pointeurs
    Par Pellodu21 dans le forum C++
    Réponses: 4
    Dernier message: 28/10/2007, 00h37
  4. problem avec les pointeurs
    Par Halloula dans le forum C
    Réponses: 3
    Dernier message: 22/01/2007, 16h54
  5. [Débutant] Probleme avec les pointeurs
    Par amira dans le forum C
    Réponses: 14
    Dernier message: 04/12/2006, 14h27

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