Bonsoir,
j'ai un gros problème, ça fait plusieurs heures que je tente diverse approche à mon problème mais pas moyen de le régler ni même ne serrait-ce que le comprendre ...
Alors voilà, je dois faire un programme et dedans j'ai besoin d'allouer de la mémoire a un tableau [x][y] donc, je crée la fonction dans le int main premièrement, et tout fonctionne parfaitement .. Après je me dis que ce serrait plus pratique de mettre cet algorithme dans une fonction à part pour pouvoir le réutiliser, malheureusement c'est là que le problème apparaît ... Le programme ne fonctionne plus avec l'algorithme dans une fonction que le main.
Voilà le code pour mieux comprendre :
Ce n'est qu'une partie de mon projet mais c'est là qu'est le problème, j'en suis pratiquement certain. Bref ... si vous compilez ce code, il fonctionnera ... mais si vous changer la valeur 12 du "char t[12];" (dans le int main) par quelque chose de plus grand que 12 (plus petit ça fonctionne toujours) et bien j'obtiens une belle erreur de segmentation ...
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 #include <stdio.h> #include <stdlib.h> void allocat (int **pbmPic, int height); int main () { char t[12]; int **pbmPic; allocat(pbmPic, 8); pbmPic[1][34] = 1; printf("\n test = %d \n", pbmPic[1][34]); return 0; } void allocat (int **pbmPic, int height) { int c = 0, l = 0; pbmPic = malloc((height + 1)*sizeof(int)); if (!pbmPic) { printf("\nERREUR: echec de l'alloc. dyn. à la zone pixel (main)\n"); exit(EXIT_FAILURE); } for (l = 0; l < (height + 1); l++) { pbmPic[l] = malloc(240*sizeof(int*)); if (!pbmPic[l]) { printf("\nERREUR: echec de l'alloc. dyn. à la zone pixel (sec.)\n"); for (c = 0; c < l; c++) { free(pbmPic[c]); } free(pbmPic); exit(EXIT_FAILURE); } } }
Je n'y comprend plus rien ... pourtant j'ai déjà utilisé cet algorithme pour créer des tableaux à 2 dimension mais sur des éléments de structure et pas directement sur un tableau présent dans une fonction et tout fonctionnait à merveille.
Alors voilà, si vous pouviez m'éclairer sur ce point .. Je précise que je voudrais avoir les fonctions séparée, je sais déjà que cela fonctionne si on met tout dans le main.
Ah et aussi, petite question, comment peut-on vérifier que la libération de la mémoire allouée (avec la fonction free() ) a bien fonctionné ?
Partager