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 l’adresse est retournée.
 *
 *      \param n : taille d’un 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;
}