Может ли жалоба valgrind на неинициализированные значения быть ложным срабатыванием?

Итак, я учил себя 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? Я не уверен.

Заранее спасибо

10
задан pivotal 14 June 2011 в 15:34
поделиться