Probleme avec l’utilisation de la PTreplay et de ses includes en C

5 sujets de 16 à 20 (sur un total de 20)

  • 1
  • 2
  • thellier

      #389836

      On comprends pas bien ce que tu veut faire
      avoir un tableau avec 17 adresses des struct Module qui existent et on été alloués ailleurs quelque part en mémoire
      cad juste 17 ULONG dans un tableau

      ou alors un tableau qui contiennent aussi la mémoire nécessaire à ces struct modules

      > »pourquoi se casser la tête avec du malloc, faites un tableau de taille fixe »
      Attention c’est périlleux: si cette taille fixe est importante ou inconnue alors on peut dépasser la taille de la pile comme les variables locales sont dans la pile

      piark

        #389843

        Oui j’en conviens mais la visiblement le codeur ne semble pas totalement maitriser son compilo.

        Je part de l’exemple fourni, ou on parle d’un tableau à taille fixe alloué par mallocs, cellules par cellules, déjà il aurait pu allouer toutes les cellules d’un coup, avec un calloc pour initialiser tout d’un coup, mais quid de la réallocation et resize si ça dépasse, le realloc ça implique une copie, c’est pas le meilleur modèle à utiliser en C, vaut mieux faire de la liste chainée si on estime que la taille est variable.

        Et du tableau en réalloc, c’est la garantie d’un oubli de pointeur sur une cellule de l’ancien tableau mal maitrisée dans la durée, qui fini par péter le programme, ça termine en debug assez facilement.

        Pour ça que je conseille, quand on débute, de faire simple, tableaux statiques, pas de malloc, pas besoin alors de pointeurs non plus (on peut utiliser l’index), et puis après en progressant, on s’amuse à faire de l’allocation dynamique, des listes chainées, etc…..

        piark

          #389845

          Attention vous allouez avec malloc UN élement de type module à la place du tableau de pointeurs *[] qui correspond à la variable…..

          Donc soit vous faites une boucle et vous allouez module dans toutesles cases du tableau, soit vous vous virez ce malloc et ce pointeurs en case de tableau, mais la même si ça compile ça marchera pas je pense.

          piark

            #389846

            int main() {
            struct Module* Tracker[NB_MODULES];

            for (int i = 0; i < NB_MODULES; i++) {
            Tracker = malloc(sizeof(struct Module));
            if (Tracker == NULL) {
            perror(« malloc »);
            return 1;
            }

            ============

            Soit,

            for (int i = 0; i < NB_MODULES; i++) {
            Tracker[ i ] = calloc(1,sizeof(struct Module));
            if (Tracker[ i ] == NULL) {
            for( int b=0;c<i;c++) { free(Tracker[ i ]); }
            perror(« malloc »);
            return 1;
            }

            ============

            soit on vire le block malloc free et on déclare

            struct Module Tracker[NB_MODULES];

            Sachant que l’init sera inutile car tout sera à zéro.

            Mais la en l’état, déjà c’est pas le bon type et en plus le contenu des structures dans le tableau sera aléatoire.

            piark

              #389864

              Au passage, et je sais pas si ça concerne le post :

              J’ai remarqué qu’en faisant la saisie de par exemple toto [ 1 ] sans les espaces entre les crochets, la paire de crochets ne s’affiche pas sur le forum, mais si on édite c’est bien présent.

              C’est probablement un bug d’affichage.

            5 sujets de 16 à 20 (sur un total de 20)

            • 1
            • 2
            • Vous devez être connecté pour répondre à ce sujet.

            Forums AmigaOS, MorphOS et AROS Développement Probleme avec l’utilisation de la PTreplay et de ses includes en C

            Amiga Impact