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;
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 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
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;
}
/* 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
 
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;
}
L'erreur provient juste àpres la fonction addLine().

SVP, cela fait 2 jours que je suis dessus sans succés.