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;
}
내가 점점 오전 Valgrind의 오류는 다음과 같습니다 올바른 방향으로
==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
수있는 사람 '포인트'나?
URL에 메모리를 할당 한 다음 널 포인터로 설정하십시오. (url = '\ 0';) 아마도 url [0] = '\ 0'을 설정한다는 의미였습니까? ? – Joe
아마도 strncpy를 사용하고 싶습니까? – Cascabel
처음 두 개의'malloc' 호출로 메모리 누수가 발생합니다. 그런데 완전히 잘못된 것입니다. 왜'size'를'char' * 포인터 *의 크기로 예약할까요? 세 번째'malloc'은 또한 잠재적 인 혼란의 징후를 보여줍니다 : (1) malloc 반환을 던지지 말고, 버그 만 숨 깁니다. (2) sizeof (char)는 정의에 따라 1이고, 'malloc'은 할당하고자하는'char'의 번호입니다. –