Как исправить ошибку «Conditional jump or move depends on uninitialised value(s)» при вызове memcpy в Си

У меня возникла проблема с модулем, который отвечает за динамическое создание форматной строки. Программа, выполняется корректно, но есть проблемы с использованием памяти. Что пишет компилятор:

==13839== Conditional jump or move depends on uninitialised value(s)
==13839==    at 0x483EFA9: __strlen_sse2 (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==13839==    by 0x109979: add_format_string_int (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x109CF1: create_scan_format_string_client (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x109F7D: write_data_client (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x1093C9: main (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839== 
==13839== Conditional jump or move depends on uninitialised value(s)
==13839==    at 0x483EFA9: __strlen_sse2 (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==13839==    by 0x109C82: add_format_string_print (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x109D9B: create_print_format_string_client (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x109F97: write_data_client (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)
==13839==    by 0x1093C9: main (in /home/qostua/Документы/CodingCourse/CodingCourse/hw1/homework/main.out)

Функция add_format_string_int, в которой, в том числе, он находит ошибку:

char *format_scan_string = malloc(TOTAL_FORMAT_STRING_MAX_SIZE);
create_scan_format_string_client(format_scan_string);
free(format_scan_string);

void create_scan_format_string_client(char *format_string) {
    add_format_string_int(format_string);
    add_format_string_string(format_string, MAX_NAME_SIZE);
    add_format_string_string(format_string, MAX_NAME_SIZE);
    add_format_string_string(format_string, MAX_ADDRES_SIZE);
    add_format_string_string(format_string, MAX_TEL_NUMBER_SIZE);
    add_format_string_double(format_string);
    add_format_string_double(format_string);
    add_format_string_double(format_string);
}

void add_format_string_int(char *out_format_string) {
    char format_string[FORMAT_STRING_MAX_SIZE] = {0};
    snprintf(format_string, FORMAT_STRING_MAX_SIZE, "%%d");
    memcpy(out_format_string + strlen(out_format_string), format_string, strlen(format_string) + 1);
}

Насколько я могу судить, проблема с вызовом memcpy, а именно с первым аргументом. Однако как это исправить, я уже несколько дней совершенно не понимаю. Буду премного благодарен за любую помощь


Ответы (0 шт):