バイナリ検索ツリーの挿入機能がありますが、なぜそのエラーが表示されているのかわかりません。たとえ私がFALSEを返しても、関数が終了する直前にもそれが起こります。どんな助けもありがとうございます。警告:コントロールは非void関数の終了に達します。 Cバイナリ検索ツリー
boolean insert(NODE **root, Employee e){
NODE *cursor,*temp;
// boolean status;
temp = (NODE *)malloc(sizeof(NODE));
assert(temp != NULL);
temp->element = (Employee *)malloc(sizeof(Employee));
assert(temp -> element != NULL);
*(temp -> element) = e;
temp -> left = NULL;
temp -> right = NULL;
if (*root == NULL) {
*root = temp;
return TRUE;
}
// tree is non-empty
cursor = *root;
while (cursor != NULL) {
if(e.ID < cursor -> element -> ID){
if(cursor -> left == NULL){
cursor -> left = temp;
return TRUE;
}
else cursor = cursor -> left;
}
//e goes to the right
else {
if (e.ID > cursor -> element -> ID){
if(cursor -> right == NULL){
cursor -> right = temp;
return TRUE;
}
else
cursor = cursor -> right;
}
else { // e is already in the tree
free(temp -> element);
free(temp);
return FALSE;
}
}
} // while cursor != NULL
} // insert
'return'文にヒットしないパスがコード内にあります。 –
少なくとも、コンパイラは存在しないことを証明できません。 –
"返り値をFALSEにしても、関数が終了する直前にもそれが起こります。" 'return FALSE;'をどこに置くことができますか? 'while'ループの後に置くと、診断は間違っています。しかし、コンパイラがそのようなことを間違ったものにしてしまうという誤ってwhileループの中に入れた可能性が高くなります。 –