2014-02-20 2 views
0

У меня возникли проблемы с использованием Valgrind для проверки утечек памяти (а также для понимания segfault, который я получаю в fprintf), но кажется, что есть какая-то пара неинициализированных значений, используемых не исходит из моего кода. Я новичок в отладке с отладчиками, чтобы у меня что-то не хватало.OpenMP Uninitialized values ​​и Valgrind

Я знаю, что Valgrind не совместим с моим GCC OpenMP (http://valgrind.org/docs/manual/drd-manual.html#drd-manual.openmp), но я использую его и компилирую свой код с -pedantic -Wall -static -O0 -g -fopenmp У меня нет ошибок.

Однако при работе Valgrind с

valgrind --leak-check=full --track-origins=yes --error-limit=no --log-file=./logfile ~/developing/trunk/gop.exe 

я получаю в моем логфайл много предупреждений, начиная с

==5944== Memcheck, a memory error detector 
==5944== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==5944== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==5944== Command: /home/henrique/developing/trunk/gop.exe 
==5944== Parent PID: 11534 
==5944== 
==5944== Syscall param set_robust_list(head) points to uninitialised byte(s) 
==5944== at 0x4983DF: __pthread_initialize_minimal (nptl-init.c:369) 
==5944== by 0x498920: (below main) (libc-start.c:146) 
==5944== Address 0x4000bf0 is not stack'd, malloc'd or (recently) free'd 
==5944== Uninitialised value was created 
==5944== at 0x513A6A: brk (brk.c:32) 
==5944== by 0x4ED4EB: sbrk (sbrk.c:54) 
==5944== by 0x498C13: __libc_setup_tls (libc-tls.c:150) 
==5944== by 0x498366: __pthread_initialize_minimal (nptl-init.c:296) 
==5944== by 0x498920: (below main) (libc-start.c:146) 

А потом получаю много предупреждений (тысячи!), Похожий на тот, ниже

==5944== Conditional jump or move depends on uninitialised value(s) 
==5944== at 0x4EF546: __linkin_atfork (register-atfork.c:119) 
==5944== by 0x4BA5D3: ptmalloc_init (arena.c:388) 
==5944== by 0x4BB283: malloc_hook_ini (hooks.c:32) 
==5944== by 0x51842B: _dl_init_paths (dl-load.c:732) 
==5944== by 0x4F097A: _dl_non_dynamic_init (dl-support.c:268) 
==5944== by 0x4F1352: __libc_init_first (init-first.c:83) 
==5944== by 0x49895B: (below main) (libc-start.c:165) 
==5944== Uninitialised value was created 
==5944== at 0x513A6A: brk (brk.c:32) 
==5944== by 0x4ED4EB: sbrk (sbrk.c:54) 
==5944== by 0x498C13: __libc_setup_tls (libc-tls.c:150) 
==5944== by 0x498366: __pthread_initialize_minimal (nptl-init.c:296) 
==5944== by 0x498920: (below main) (libc-start.c:146) 

Я что-то упустил при компиляции или запуске Valgrind? Или у моего кода действительно есть все эти ошибки?

спасибо!

ответ

0

В некоторых библиотеках есть много маленьких предупреждений, подобных тем, которые вы показываете. Я не думаю, что они происходят из вашего кода, видя имена файлов, где они происходят.

Вам придется искать где-то еще для вашего segfault. Попробуйте запустить его с помощью gdb, посмотрите, где он остановится, и распечатайте значения вокруг ошибки, чтобы узнать, что происходит.

Надеюсь, что это поможет :)