Итак, я учил себя C, и в надежде с самого начала научиться правильно управлять памятью и писать лучший код, я использовал Valgrind для всего. Это помогло мне с утечками памяти, но я не могу избавиться от этой ситуации «Условный переход или перемещение зависит от неинициализированных значений / Неинициализированное значение было создано из-за выделения кучи», хотя я сузил его в этот блок кода:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char* test = (char*) malloc(3);
strncpy(test, "123", 2);
printf("%s\n", test);
free(test);
return 0;
}
Когда я запускаю Valgrind с --- track-origins = yes
, я получаю следующий результат:
==91702== Conditional jump or move depends on uninitialised value(s)
==91702== at 0x100011507: strlen (mc_replace_strmem.c:282)
==91702== by 0x1000AA338: puts (in /usr/lib/libSystem.B.dylib)
==91702== by 0x100000EFA: main (valgrind_test.c:10)
==91702== Uninitialised value was created by a heap allocation
==91702== at 0x100010345: malloc (vg_replace_malloc.c:236)
==91702== by 0x100000EEA: main (valgrind_test.c:8)
Мне это кажется ложным срабатыванием, но я недостаточно уверен в своих знаниях, чтобы списывать это со счетов как таковое. Может быть, я неправильно выделяю или неправильно использую strncpy? Я не уверен.
Заранее спасибо