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 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