我一直在尋找一個類似的文章,我沒有成功。我正在使用一個迄今爲止似乎是確定性的代碼,並且目前正在正常工作。然而,在它上運行Valgrind memcheck時,我得到了成千上萬個引用「條件跳轉或移動取決於未初始化值」的警告。 追蹤錯誤時,valgrind會將其追溯到brk和sbrk函數。我不明白爲什麼會發生這種情況,更重要的是如何解決它?低於我的代碼的一部分。valgrind memcheck條件跳轉追蹤到brk和sbrk函數
navSolutions->channel.satPositions = (fl64 **) calloc(3 , sizeof(fl64*));
ERRORCHECK(navSolutions->channel.satPositions == NULL)
navSolutions->channel.satPositionsOld = (fl64 **) calloc(3 , sizeof(fl64*));
ERRORCHECK(navSolutions->channel.satPositionsOld == NULL)
這也是相關的,很多這些調用的每個I分配內存的指針調用free()時發生。 任何幫助將是偉大的。在此先感謝
作爲快速答覆的一部分,這裏是所需的額外信息: 你好,再次感謝您的快速答案。我的代碼是在Linux Mint 17.2 Cinamon 64位上運行的。我也使用以下版本的gcc(Ubuntu 4.8.4-2ubuntu1〜14.04.1)4.8.4和valgrind版本3.10.1。我也試過Nate Eldredge給出的建議,但沒有成功。下面是一些的valgrind的輸出中
==25494== Conditional jump or move depends on uninitialised value(s)
==25494== at 0x4669D7: _int_malloc (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x4695C5: calloc (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x40C1F5: initNavSolution (initNavSolutions.c:57)
==25494== by 0x401714: nav_init (nav_init.c:35)
==25494== by 0x40107B: main (main.c:38)
==25494== Uninitialised value was created
==25494== at 0x4BA9CC: brk (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x490C34: sbrk (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x454793: __libc_setup_tls (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
==25494== by 0x4543FD: (below main) (in /home/glonass/Documents/EclipseProjects/pyxis/bin/nav/navexe)
感謝所有提前再次
所以看到(一些)Valgrind消息也會有所幫助。 – alk
基於標準C,我不認爲你可以放心,你的數組被初始化爲所有NULL指針;它全部位爲零,但原則上NULL指針可以具有其他表示。也許這是警告的原因?如果在calloc之後,你將顯式循環設置爲分配數組的每個元素爲NULL,是否有幫助? –
在哪個平臺上觀察此行爲? – alk