Bonjour,
Actuellement je developpe un programme ayant besoin d'allocation mémoire contenue et j'ai besoin de réallouer cet espace mémoire, c'est un tableau de flotant à trois dimensions. Cependant, des erreurs de segmentation dans mon code. pouvez-vous m'aider car je ne vois vraiment pas l'erreur . Merci,
Mon Code est le suivant :
Structure pour conserver tous les éléments :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct ougdata_t{ float *ttt; float **tt; float ***t; int n,m,p,c ; /* Index : X,Y,Z */ int max_n,max_m,max_p; /* Capacité : X,Y,Z */ }ougdata_t;/* Fonction pour ajouter une donnée, si la taille de la ligne n'est pas assez grande, on réalloue */
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 /* Fonction d'allocation de la mémoire au départ */ ougdata_t* initDisplacement(){ int nmp,nm,i,j; ougdata_t *tmp = (ougdata_t*)malloc(sizeof(ougdata_t)); if(tmp==NULL) return NULL; tmp->n = 0; /* Initialisation des indices dans le tableau */ tmp->m = 0; tmp->p = 0; tmp->max_n = 1000; /* Taille du tableau au départ */ tmp->max_m = 10; tmp->max_p = 12; /* Taille des déplacements du noeud */ tmp->c=tmp->n; /* On alloue tout l'esplace mémoire necessaire */ nmp = tmp->max_n * tmp->max_m * tmp->max_p; tmp->ttt = (float *) malloc(nmp * sizeof(float)); /* Allocation mémoire pour n x m x 1 */ nm = tmp->max_n * tmp->max_m; tmp->tt = (float **) malloc(nm * sizeof(float *)); /* Allocation mémoire for n x 1 x 1 */ tmp->t = (float ***) malloc(tmp->max_n * sizeof(float **)); /* Attache des différents tableau entre eux */ for (i = 0; i < tmp->max_n; i++){ tmp->t[i] = tmp->tt + tmp->max_m*i; for (j = 0; j < tmp->max_m; j++){ tmp->t[i][j] = tmp->ttt + tmp->max_m*tmp->max_p*i + tmp->max_p*j; } } return tmp; }
/* Fonction qui permet de passer à une autre ligne */
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 int AddDisplacement(ougdata_t* tmp, float *val){ int nmp, nm, j, i; /* Le tableau de donné n'est pas initialisé */ if(tmp->t == NULL) return 0; /* Le nombre de colonne est au max, nous devons réallouer */ if(tmp->m == tmp->max_m){ printf("Double X"); system("PAUSE"); /* On double la capacité du nombre de ligne du tableau */ tmp->max_m = tmp->max_m*2; /* Nous devons réallouer un nouvel espace mémoire pour tout contenir */ nmp = tmp->max_n * tmp->max_m * tmp->max_p; tmp->ttt=(float *)realloc(tmp->ttt,sizeof(float) * nmp); /* Allocation mémoire pour n x m x 1 */ nm = tmp->max_n * tmp->max_m; tmp->tt=(float **)realloc(tmp->tt,sizeof(float *) * nm); /* Pour chaque nouvel emplacement, nous liquons les données */ tmp->t[tmp->n] = tmp->tt + tmp->max_m*tmp->n; for (j = (tmp->m); j < tmp->max_m; j++){ tmp->t[tmp->n][j] = tmp->ttt + (tmp->max_m*tmp->max_p*tmp->n) + tmp->max_p*j; } } for(i=0;i<12;i++) tmp->t[tmp->n][tmp->m][i] = val[i]; tmp->m = tmp->m+1; return 1; }
L'erreur provient juste àpres la fonction addLine().
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 int AddLine(ougdata_t* tmp, hdf_f* tmp_hdf){ int nmp, nm, i,j; printf("New Line\n"); system("PAUSE"); /* Le tableau de donné n'est pas initialisé */ if(tmp->t == NULL) return 0; /* Le nombre de ligne est au maximum, nous devons réallouer le tableau pour plus de place */ if(tmp->n == tmp->max_n){ /* Appel à la fonction de vidage du buffer des données dans le tableau de déplacements */ /* Vide le tableau en l'ecrivant dans un fichier */ tmp->n=-1; } tmp->n=(tmp->n)+1; tmp->c = tmp->m; tmp->m = 0; return 1; }
SVP, cela fait 2 jours que je suis dessus sans succés.
Partager