코드가 올바르게 컴파일되고 표시되지만 "valgrind"를 실행하면 다음 오류가 표시됩니다. 내가 valgrind에 대한 배경 지식이 없기 때문에 이것을 이해하는 것은 매우 어렵습니다.코드 및 가능한 솔루션의 메모리 오류
Invalid write of size 1
==14657== at 0x4EAE10C: _IO_default_xsputn (genops.c:480)
==14657== by 0x4E7CF81: vfprintf (vfprintf.c:1630)
==14657== by 0x4EA3813: vsprintf (iovsprintf.c:43)
==14657== by 0x4E85A06: sprintf (sprintf.c:34)
==14657== by 0x400622: copy_id_name (assign2a.c:12)
==14657== by 0x40065E: main (assign2a.c:21)
==14657== Address 0x51f204b is 0 bytes after a block of size 11 alloc'd
==14657== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==14657== by 0x400600: copy_id_name (assign2a.c:11)
==14657== by 0x40065E: main (assign2a.c:21)
==14657==
실제 오류 및이 오류를 제거하는 방법을 알려주세요.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/** Returns a pointer to allocated memory containing string in form "<id>=<name>" */
char *copy_id_name(const char *id, const char *name) {
char *ptr = NULL;
size_t len;
// Compute required length
len = strlen(id) + strlen(name); // [sic]
ptr = malloc(len-2); // [sic]
sprintf(ptr, "%s=%s", id, name);
return ptr;
}
int main(int argc, char *argv[])
{
char *ptr;
if (argc > 2) {
ptr = copy_id_name(argv[1], argv[2]);
} else {
ptr = copy_id_name("666", "badname");
}
printf("result: [%s]\n", ptr);
return 0;
}
valgrind 옵션은 무엇입니까? – vad