-1
그래서 쉽게 할당하고 할당 된 메모리를 확보하려고했지만 valgrind가 이러한 오류를 씁니다.할당시 유효하지 않은 읽기/쓰기 크기
C에서#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char* area=(char*)malloc(3);
strcpy(area, "lal");
printf("%s\n",area);
free(area);
return 0;
}
Invalid write of size 4
==2728== at 0x10873A: main (in /home/david/po1/a.out)
==2728== Address 0x5200040 is 0 bytes inside a block of size 3 alloc'd
==2728== at 0x4C2CB3F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2728== by 0x108731: main (in /home/david/po1/a.out)
==2728==
문자열이''strcpy (area, "lal")와 같은 큰 따옴표로 묶여있을 때 특히 그렇습니다. – ron
'strcpy()'는 실제로 널 종결자를 복사합니다. 복사를 멈출 때를 알려주는 널 종결 자! 이런 이유로'strcpy()'를 사용하는 것은 일반적으로 안전하지 않은 것으로 간주됩니다. –
@AndrewDunn 길이를 먼저 확인하거나 길이를 알고 있으면 완벽하게 안전합니다. –