-1
所以我试图轻松分配,然后释放分配的内存,但valgrind写入这些错误。分配时无效的读/写大小
#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如果你先检查长度或知道长度,那么它是完全安全的 –