Bonjour !
J'ai un Gros gros souci : je suis pas tres fort avec l'alloc dyn, et pas de po, j'ai besoin de 2 tableau dynamique a 3 dimension contenants :
un pointeur sur un SDL_Surface
un SDL_Rect

et un tab a deux dimension contenant un nombre...
Bien entendu, mon code y marche pas (le prog demarre et s'arrete aussitot...)
voici moj code :
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
/*FONCTION DE CONSTRUCTION*/
void initialiser_decors(Decors *decors, int l_monde, int h_monde)
{
	int i = 0, j = 0, k = 0;
 
	char nom_all_decors[150];
 
	dictionary *all_decors = NULL;
 
	int nb_decors_carte = 0;
 
	char sk[10] = "";
 
	decors->surf = malloc(sizeof(*decors->surf) * l_monde); /*1ere dim...*/
	decors->pos = malloc(sizeof(*decors->pos) * l_monde);
	decors->nb_decors = malloc(sizeof(*decors->nb_decors) * l_monde);
 
	if(decors->surf != NULL && decors->pos != NULL && decors->nb_decors != NULL)
	{
		for(i = 0 ; i < l_monde ; i ++)/*parcourir la 1ere dim...*/
		{
			decors->surf[i] = malloc(sizeof(*decors->surf) * h_monde);/*2eme dim*/
			decors->pos[i] = malloc(sizeof(*decors->pos) * h_monde);
			decors->nb_decors[i] = malloc(sizeof(*decors->nb_decors) * h_monde);
 
			if(decors->surf[i] != NULL && decors->pos[i] != NULL && decors->nb_decors != NULL)
			{
				for(j = 0 ; j < h_monde ; j ++)/*parcourir la 2eme dim...*/
				{
					sprintf(nom_all_decors, "quetes/Q1/monde/%d-%d/decors.map", i, j);
					all_decors = iniparser_load(nom_all_decors);
 
					nb_decors_carte = iniparser_getint(all_decors, "settings:nb", 0);
					decors->nb_decors[i][j] = nb_decors_carte;
 
					decors->surf[i][j] = malloc(sizeof(*decors->surf) * nb_decors_carte);
					decors->pos[i][j] = malloc(sizeof(*decors->pos) * nb_decors_carte);
					if(decors->surf[i][j] != NULL && decors->pos[i][j] != NULL)
					{
						for(k = 0 ; k < nb_decors_carte ; k ++)
						{
							sprintf(sk, "D%d:img", k);
							decors->surf[i][j][k] = IMG_Load(iniparser_getstr(all_decors, sk));
							sprintf(sk, "D%d:x", k);
							decors->pos[i][j][k].x = iniparser_getint(all_decors, sk, 0);
							sprintf(sk, "D%d:y", k);
							decors->pos[i][j][k].y = iniparser_getint(all_decors, sk, 0);
						}
					}
 
					iniparser_freedict(all_decors);
				}
			}
		}
	}
}
 
/*FONCTION DE DESTRUCTION*/
void nettoyer_decors(Decors *decors, int l_monde, int h_monde)
{
	int i = 0, j = 0, k = 0;
 
	for(i = 0 ; i < l_monde ; i ++)
	{
		for(j = 0 ; j < h_monde ; j ++)
		{
			for(k = 0 ; k < decors->nb_decors[i][j] ; k ++)
			{
				SDL_FreeSurface(decors->surf[j][i][k]);
			}
		}
	}
 
	free(*decors->surf);
	free(*decors->pos);
	free(*decors->nb_decors);
 
	free(decors->surf);
	free(decors->pos);
	free(decors->nb_decors);
}
 
/*STRUCT DECORS*/
typedef struct Decors Decors;
struct Decors
{
	SDL_Surface ****surf;
	SDL_Rect ***pos;
	int **nb_decors
};
Si vous pouviez m'aider a resoudre ce pb, svp ...
merci, @+