Problème de mémoire

2 sujets de 1 à 2 (sur un total de 2)

  • Rusback

      #8340

      bonjour,

      dans mon programme, j’ai toujours un bug que j’arrive pas à éradiquer…

      voici les 3 fonctions qui m’arrachent les cheveux depuis quelques jours…

      int strlenNew(char *str)

      {

      int l;

      l = 0;

      if(str != NULL) l = strlen(str);

      return(l);

      }

      void freeString(char *str)

      {

      if(str) FreePooled(mpool, str, strlenNew(str) + 1);

      }

      char *allocString(char *str)

      {

      char *b;

      int l;

      if(str == NULL) return(NULL);

      l = strlenNew(str);

      b = (char *)AllocPooled(mpool, l + 1);

      if(b && (l > 0)) strncpy(b, str, l);

      return(b);

      }

      si quelqu’un pouvait m’aider parce que là je sèche…

      je trouves que tout est correct.

      merci d’avance pour votre aide

      henes

        #128402

        Tu as oublié de traiter le cas où str est une chaine de longueur nulle : b[0] doit contenir 0.

        Le bon réflèxe à avoir est de toujours terminer la chaine copiée par strncpy puisqu’il ne le fait que s’il y a de la place…

        char *allocString(char *str)

        {

        char *b;

        int l;

        if(str == NULL) return(NULL);

        l = strlenNew(str);

        b = (char *)AllocPooled(mpool, l + 1);

        if(b)

        {

        if(l > 0)) strncpy(b, str, l);

        b[l] = `';

        }

        return(b);

        }

        Enfin, n’oublie pas que, par défaut, un pool ne peut pas être utilisé par plusieurs taches sans traitement spécifique.

      2 sujets de 1 à 2 (sur un total de 2)

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

      Forums AmigaOS, MorphOS et AROS Développement Problème de mémoire

      Amiga Impact