Problème de mémoire
2 sujets de 1 à 2 (sur un total de 2)
2 sujets de 1 à 2 (sur un total de 2)
- Vous devez être connecté pour répondre à ce sujet.
2 sujets de 1 à 2 (sur un total de 2)
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
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)
› Forums › AmigaOS, MorphOS et AROS › Développement › Problème de mémoire
© 2024 Amiga Impact.
Construit avec par Thèmes Graphene.