Valgrind lecture Invalide taille de 1
Pour la vie de moi je ne peux pas savoir pourquoi je reçois un invalid read size of 1
pour cet extrait de code, je suis assez sûr qu'il a quelque chose à faire avec moi d'abuser de la char *url pointer
...
char *extractURL(char request[])
{
char *space = malloc(sizeof(char *));
space = strchr(request, ' ')+1;
char *hostend = malloc(sizeof(char *));
hostend = strchr(request, '\r');
int length = hostend - space;
if (length > 0)
{
printf("Mallocing %d bytes for url\n.", length+1);
char *url = (char *)malloc((length+1)*sizeof(char));
url = 'char *extractURL(char request[])
{
char *space = malloc(sizeof(char *));
space = strchr(request, ' ')+1;
char *hostend = malloc(sizeof(char *));
hostend = strchr(request, '\r');
int length = hostend - space;
if (length > 0)
{
printf("Mallocing %d bytes for url\n.", length+1);
char *url = (char *)malloc((length+1)*sizeof(char));
url = '\0';
strncat(url, space, length);
return url;
}
//else we have hit an error so return NULL
return NULL;
}
';
strncat(url, space, length);
return url;
}
//else we have hit an error so return NULL
return NULL;
}
La valgrind erreur que je reçois est :
==4156== Invalid read of size 1
==4156== at 0x4007518: strncat (mc_replace_strmem.c:206)
==4156== by 0x8048D25: extractURL ()
==4156== by 0x8048E59: processRequest ()
==4156== by 0x8049881: main ()
==4156== Address 0x0 is not stack'd, malloc'd or (recently) free'd
Quelqu'un peut 'point' moi dans la bonne direction?
Vous allouer de la mémoire pour les url, puis définissez-la sur un pointeur null. (url = '\0';) as-tu veux dire, peut-être, pour définir l'url[0] = '\0'; ?
Avez-vous peut-être voulez juste utiliser strncpy?
Vous avez également des fuites de mémoire avec vos deux premières
Avez-vous peut-être voulez juste utiliser strncpy?
Vous avez également des fuites de mémoire avec vos deux premières
malloc
appels, qui sont eux-mêmes complètement bidon, pourquoi vous réserve sizeof
de la taille d'un char
pointeur? Votre troisième malloc
montre aussi des signes de confusion possible: (1) ne jette pas le retour de malloc
, ce ne cache bugs (2) sizeof(char)
est 1
par définition, le numéro que vous avez passer à malloc
est le nombre de char
vous voulez être alloué.OriginalL'auteur DMcB1888 | 2012-02-24
Vous devez vous connecter pour publier un commentaire.
Ici
vous perdez immédiatement le malloced de la mémoire par la mise en
url
àNULL
. Notez que'\0'
est 0, ce qui est un pointeur null constante. Et puis vous essayez destrncat
quelque chose à un emplacement de mémoire non valide.Vous avez probablement censé ouvrir
.
Eh bien, je voudrais réellement s'attendre à une erreur de segmentation lors de l'appel de
strncat(NULL,something,n)
, mais valgrind peut signaler que, si elle le préfère.OriginalL'auteur Daniel Fischer