Bonjour,

Je suis en train de faire un jeu de dames, et lorsque j'essaye de détruire un damier (tableau de 50 cases en mémoire), j'obtiens une seg fault du type:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
| |b| |b| |b| |b| |b| 10
|b| |b| |b| |b| |b| | 9
| |b| |b| |b| |b| |b| 8
|b| |b| |b| |b| |-| | 7
| |-| |-| |-| |-| |b| 6
|-| |-| |-| |w| |-| | 5
| |w| |w| |-| |w| |w| 4
|w| |w| |w| |w| |w| | 3
| |w| |w| |w| |w| |w| 2
|w| |w| |w| |w| |w| | 1
 a b c d e f g h i j
Entrez le numero d'un coup parmi la liste des coups possibles:

0: e3f4
1: g3f4
2: b4a5
3: b4c5
4: d4c5
5: d4e5
6: h4i5
7: j4i5
8: g5h6
9: g5f6
99
free(): invalid pointer 0x60000fffffffb2b0!
free(): invalid pointer 0x60000fffffffb220!

à la sortie du programme; je n'y comprend pas grand chose.
Code utile:

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
 
 
#ifndef _PLATEAU
#define _PLATEAU
 
// valeur d'une dame
#define VD 2 
 
#include "Coup.h"
#include <iostream>
#include <vector>
 
/*Stockage du plateau */
 
class Plateau {
public:
 
    // Constructeur : Mise en place de la configuration initiale
    Plateau();
 
    // Constructeur de recopie
    Plateau(const Plateau& p);
 
    // Construction du plateau a partir d'un fichier 
    Plateau(char* name);
 
    // écriture de la position courante dans un fichier
    void writeToFile(char* name);
 
    // accès à une case du tableau représentant le plateau 
    short operator[](int i) const {
          return damier[i];
    }
 
    // accès à la valeur du jeu
    int getVal() const {
          return val;
    }
 
    // avancée d'un coup sans supprimer le pion du plateau dans le cas d'une prise
    void ghostMove(const Coup& cp);
 
    // recul d'un coup (memes conditions que ci-dessus)
    void ghostUndo();
 
    // avancée d'un coup
    void move(const Coup& cp);
 
    // recul d'un coup
    void undo();
 
    // ajoute les pions pris dans le cas d'une entrée de coup
    Coup decoreCoup(Coup cp);
 
    // indique si une position est dynamique (ie: pions en prise) ou statique
    bool isStatic(int nbCoups);
 
   // évaluation statique d'une position
   int evalPos(); 
 
   // stockage de la partie dans un fichier
    void stockePartie(char* name);
 
    // lit des coups dans un fichier en les executant au fur et a mesure
    void jouePartie(char* name);
 
   // destructeur
   ~Plateau() {
         delete []damier; // PROVOQUE UNE SEGFAULT (??? pkoi ???)
   } 
 
private:   
 
  // Stockage du plateau : 
  short damier[50];
 
  // vecteur de coups representant la partie via les differents coups joues 
  std::vector<Coup> partie;
 
  // variable globale memorisant la valeur du jeu, dames=VD et pions=1 au début 
  int val; // + si avantage blanc, - si avantage noir 
 
};
 
// Affichage du plateau
extern std::ostream& operator<<(std::ostream& o, const Plateau& p);
 
#endif
Merci d'avance!