Valgrind は、私が解決できない 2 つのエラーを示しています。次の関数で「条件付きジャンプまたは移動は初期化されていない値に依存します」というエラー メッセージが表示されますunplug_set
。NULL
チェックのせい?関数は、二重リンク リストから要素をアンプラグする必要があります。
void unplug_set(set * set_to_unplug){
set * last_set = set_to_unplug->last;
set * next_set = set_to_unplug->next;
set_to_unplug->next = NULL;
set_to_unplug->last = NULL;
148 if(last_set == NULL && next_set == NULL){ // only one element left
ordered_by_score_set[set_to_unplug->weight] = NULL;
150 }else if(last_set == NULL){ // first set
next_set->last = NULL;
ordered_by_score_set[set_to_unplug->weight] = next_set;
} else if (next_set == NULL) { // last set
last_set->next = NULL;
} else { // set in the middle
last_set->next = next_set;
next_set->last = last_set;
}
}
Valgrind コマンド:
valgrind --dsymutil=yes --track-origins=yes ./set_program
出力:
==45085== Conditional jump or move depends on uninitialised value(s)
==45085== at 0x100001A2C: unplug_set(set*) (:148)
...
==45085== by 0x100001294: main (Main.cpp:81)
==45085== Uninitialised value was created by a heap allocation
==45085== at 0xC713: malloc (vg_replace_malloc.c:274)
==45085== by 0x63346: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==45085== by 0x100001E0C: add_set(int, int, unsigned int const*, unsigned short const*, int, unsigned int const*) (:57)
==45085== by 0x10000127E: main (Main.cpp:39)
==45085==
==45085== Conditional jump or move depends on uninitialised value(s)
==45085== at 0x100001A60: unplug_set(set*) (:150)
...
==45085== by 0x100001294: main (Main.cpp:81)
==45085== Uninitialised value was created by a heap allocation
==45085== at 0xC713: malloc (vg_replace_malloc.c:274)
==45085== by 0x63346: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==45085== by 0x100001E0C: add_set(int, int, unsigned int const*, unsigned short const*, int, unsigned int const*) (:57)
==45085== by 0x10000127E: main (Main.cpp:39)