Bonjour,

en ce moment je travaille sur un programme de calcul scientifique qui utilise beaucoup de tableaux à 4 dimensions , alors au lieu "d'alloquer" chaque fois un tableau et répéter le code, j'ai construit une fonction qui fait l'allocation dynamique de tableux 4D; c'est la suivante :

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
 
#include <stdlib.h>
float ****AllocfloatTab4D(int dim1, int dim2, int dim3, int dim4)
{
    int i, j, k;
    float ****p;
    if ((p = (float ****)malloc(dim1*sizeof(float ***))) == NULL)
       return NULL;
    for (i = 0; i < dim1; i++) {
        if ((p[i] = (float ***)malloc(dim2*sizeof(float **))) == NULL)
           return NULL;
        for (j = 0; j < dim2; j++)
            if ((p[i][j] = (float **)malloc(dim3*sizeof(float *))) == NULL)
               return NULL;
            for (k = 0; k < dim3; k++)
                if ((p[i][j][k] = (float *)malloc(dim4*sizeof(float ))) == NULL)
                   return NULL;
    }
    return p;
} 
//
je peux l'utiliser par exemple comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
int main()
{
     float ****tab;
     if ((tab = AllocfloatTab4D(10, 15, 20, 25)) != NULL)
     tab[5][7][0][3] = 0;
     // ...... 
}
//
le prblème :
1- est ce que la fonction est correcte?
2- comment faire la fonction inverse " DeallocfloatTab4D" qui d'aprés son nom fait le travail inverse c-à-d libérer la mémoire allouer par la fonction "AllocfloatTab4D" ?

merci d'avance.