-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長さを最初に確認するか、長さを知っていれば完全に安全です。 –