Проблема в том, что reverse_chr
не является допустимой строкой, поскольку она неправильно завершена.
char* reverse_chr=(char *) malloc(strlen(chr)+1);
memset(reverse_chr, 0, strlen(chr));
Вы выделяете 7 байтов, но только для первых 6 задается 0
.
for (int t=0; t<chrlen; t+=2)
{
reverse_chr[t]=...
reverse_chr[t+1]=...
Этот цикл for
также записывает только первые 6 элементов reverse_chr
.
int len_reverse_chr = strlen(reverse_chr);
Затем эта строка пытается найти байт NUL в reverse_chr
, но первые 6элементы не '\0'
, а 7-й неинициализирован (отсюда и жалоба от valgrind).
Исправлено:
Либо выполните
reverse_chr[chrlen] = '\0';
после цикла, либоиспользуйте calloc
:
reverse_chr = static_cast<char *>(calloc(strlen(chr)+1, sizeof *reverse_chr));
Таким образом, все выделенные байты инициализируются (и вам больше не нужно memset
).