Ниже я написал функцию _getstr()
, чтобы получить строку при вводе без использования scanf
.Однако при запуске valgrind возникает ошибка «Неверная запись размера 1».Это происходит для каждого входа.Что вызывает эту ошибку?
char *_getstr(){
char *str = NULL;
int bufsize = 0, c = 0;
do {
c = getchar();
if (c != '\n'){
str = realloc(str, (bufsize + 1)*sizeof(char));
str[bufsize++] = c;
}
} while (c != '\n');
str[bufsize] = '\0';
return str;
}
В основном я делаю это:
char *s1 = _getstr();
Вывод valgrind при вводе ввода такой:
Insert of the first string: hello
==6830== Invalid write of size 1
==6830== at 0x109294: _getstr (changeJOIN.c:43)
==6830== by 0x10919B: main (changeJOIN.c:15)
==6830== Address 0x4a419b4 is 0 bytes after a block of size 4 alloc'd
==6830== at 0x4839D7B: realloc (vg_replace_malloc.c:826)
==6830== by 0x109264: _getstr (changeJOIN.c:39)
==6830== by 0x10919B: main (changeJOIN.c:15)