Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tricher le compilateur avec le casting

    30 août 2021 à 5:11:20

    Bonjour à tous,
    Un pointeur vers un pointeur occupe le même espace qu'un pointeur vers une variable.
    On peut donc tricher le compilateur avec un casting approprié.
    Le code suivant n'a nulle prétention d'être efficace tant au point de vue de la mémoire utilisée que du temps d'exécution.
    Il illustre seulement comment on peut utiliser la récursivité pour réserver de façon dynamique l'espace d'une hyper matrice de n'importe quelle dimension.
    (l'indentation se récupère avec un copier-coller)
    -
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    typedef int type;
    void *getArea(char *name, int size) {
        void *area = malloc(size);
        if(area) return area;
        perror(name);
        printf("Required: %d\n", size);
        exit(1);
    }
    type **hyperMatrix(int dimensions[], int nDim) {
        if(nDim <= 1) {
            type**matrix = getArea("hyperMatrix", dimensions[0] * sizeof(type));
            return matrix;
        } else {
            type **matrix = getArea("hyperMatrix", dimensions[0] * sizeof(type*));
            for(int i = 0; i < dimensions[0]; i++) {
                matrix[i] = (type*) hyperMatrix(&dimensions[1], nDim - 1);
            }
            return matrix;
        }
    }
    int main(void) {
        int adim[4] = {10, 10, 10, 10};
        type ****matrice = (type****) hyperMatrix(adim, 4);
        for(int i = 0; i < adim[0]; i++) {
            for(int j = 0; j < adim[1]; j++) {
                for(int k = 0; k < adim[2]; k++) {
                    for(int l = 0; l < adim[3]; l++) {
                        matrice[i][j][k][l] = 0;
                    } // l
                } // k
            } // j
        } // i
        printf("Initialisation complétée\n");
        return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter

    Le Tout est souvent plus grand que la somme de ses parties.

    Tricher le compilateur avec le casting

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown