私はC言語を使い慣れていますが、私はよくある問題を抱えていますが、私の場合はその理由を理解できません。エラー:条件ジャンプまたは移動が初期化されていない値に依存する - C valgrind
このメソッドは、指定された名前のMapを初期化し、それがRED-BLACKツリーに存在するかどうかを確認することを目的としています。
void reduceMap(char *mapName){
Map *tempMap = (Map *) malloc(sizeof(Map));
struct rbNode *tempNode = (struct rbNode *) malloc(sizeof(struct rbNode));
copyName = stringCopy(mapName);
tempMap->name = copyName;
tempNode->data = tempMap;
...DO SEARCH HERE...
freeMap(tempNode);
}
だから私は地図が含まれているノードのメモリを割り当て、研究を行うと、最終的に作成された一時オブジェクトのメモリを解放します。私のオブジェクトの構造は次の通りである。
typedef struct{
char *name;
char *specification;
Point *start, *end;
}Map;
struct rbNode{
Color color;
void *data;
struct rbNode *parent, *leftChild, *rightChild;
};
方法stringCopyとfreeMapは、次のとおりです。
void freeMap(struct rbNode *node){
if(node){
free(((Map *)node->data)->name);
if(((Map *)node->data)->specification != NULL)
free(((Map *)node->data)->specification);
free((Map *)node->data);
free(node);
}
}
char *stringCopy(const char *source){
char *copy = (char *)malloc(strlen(source) + 1);
strcpy(copy,source);
return copy;
}
私はvalgrindのを使用してプログラムをテストすることだし、これは私が取得エラーです:
Conditional jump or move depends on uninitialised value(s)
==5215== at 0x8049DF3: freeMap (in /home/ve/Dropbox/progetto2016/Percorsi/percorsi)
==5215== by 0x8048C40: reduceMap (in /home/ve/Dropbox/progetto2016/Percorsi/percorsi)
==5215== by 0x80489DA: main (in /home/ve/Dropbox/progetto2016/Percorsi/percorsi)
==5215== Uninitialised value was created by a heap allocation
==5215== at 0x402C17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==5215== by 0x8048B0A: reduceMap (in /home/ve/Dropbox/progetto2016/Percorsi/percorsi)
==5215== by 0x80489DA: main (in /home/ve/Dropbox/progetto2016/Percorsi/percorsi)
私はこの問題がtempMapの割り当てによって発生していることを理解していますが、それは何も初期化されていないようですが、なぜですか?私は名前と仕様だけを気にします...私は本当に理解していません。
助けていただければ幸いです。 が
注:Cでは_methods_はサポートされず、_functions_はサポートされません。そして、あなたは 'malloc'&friendsの結果をキャストすべきではありません。 – Olaf
ありがとうございました@Olafはそれを指摘しました – VeVeVez