Bonjour,

voilà mon problème : je souhaiterais pouvoir entrer les données référencées par un pointeur de type short *** dans un pointeur de type void *.

Avant de débuter le "transfert" des données, je sauvegarde dans un autre pointeur void * l'adresse de début de mon pointeur. Mais je ne suis pas sûr que ma façon de faire soit correcte.

Mais mon principal souci se situe surtout au niveau du "transfert" des données entre les deux pointeurs : en effet, je ne suis pas sûr qu'au bout du compte, le pointeur void * référence bien un tableau contenant les données du pointeur short ***.

Comme ce que je raconte n'est peut-être pas très clair (je m'embrouille un peu ), voilà mon 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
dataToSave->data = malloc(dataToSave->nvox * dataToSave->nbyper);
 
    debutData = dataToSave->data;
 
    for(i=0; i<image->width; i++){
        for(j=0; j<image->height;j++){
            for(k=0; k<image->depth; k++){
                dataToSave->data = &(image->mri[i][j][k]);
                dataToSave->data++;
            }
        }
    }
 
    dataToSave->data = debutData;
Ici, data est le fameux pointeur de type void * et mri celui de type short ***.

L'allocation de data donne un tableau de taille égale au nombre de données contenues dans mri[width][height][depth], nvox étant width*height*depth et nbyper le nombre de bytes pour une donnée.

Je suis par-contre dans l'obligation d'allouer data à cette taille, étant donné qu'il est défini dans une bibliothèque que je n'ai pas programmée.


J'ai essayé un autre moyen qui me paraissait plus juste, mais cela engendrait des erreurs :
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
dataToSave->data = (short *)malloc(dataToSave->nvox * dataToSave->nbyper);

    debutData = dataToSave->data;

    for(i=0; i<image->width; i++){
        for(j=0; j<image->height;j++){
            for(k=0; k<image->depth; k++){
                (*dataToSave->data) = image->mri[i][j][k];
                dataToSave->data++;
            }
        }
    }

    dataToSave->data = debutData;
Cela produit une erreur qui me dit :
file_nifti.c:607: warning: dereferencing `void *' pointer
file_nifti.c:607: void value not ignored as it ought to be

La ligne 607 étant celle où se fait l'affectation.

Je me retrouve donc complètement bloqué là-dessus. Si qqn sait ce qu'il faut faire, je le remercie d'avance