Bonjour, je débute dans le C et je viens d'obtenir aujourd'hui ma première erreur de segmentation.
Cependant, j'ai beau tenter de réparer le problème mais ça persiste, et le débuggage avec gdb ne m'aide pas.
Je sais juste que ça bloque entre le "check 1" et le "check 2". Donc je pense que c'est soit l'affectation, soit la fonction creerPlateau qui est incorrecte.
Je remercie ceux qui auront la patience d'étudier mon problème.
Contexte : créer un plateau de jeu de n*n cases, puis afficher ce plateau. Dans ce cas, je m'attends à n'obtenir que des 0.
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 #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct { int* tableau; int n; } plateau; /*! * Fonction allouant dynamiquement un plateau dont ladresse est retournée. * * \param n : taille dun côté */ plateau* creerPlateau(int n) { assert(n >= 2 || n <= 8); plateau* new = malloc((n*n+1)*sizeof(int)); // ensemble des cases + valeur de taille d'un côté new -> n = n; free(new); // j'ai essayé sans mais le problème persiste return new; } /*! * Fonction désallouant dynamiquement le plateau passé en paramètre * * \param p : plateau à désallouer */ void detruirePlateau(plateau* p) { assert(p!=NULL); free(p); } int main() { int i, n = 5; plateau* p; p = creerPlateau(n); for(i = 0; i < n*n; i++) { printf("*** check 1 ***\n"); printf("|%d", *(p -> tableau+i)); printf("*** check 2 ***\n"); if (i != 0 || i%n == 0) printf("|\n"); } detruirePlateau(p); return 0; }
Partager