三叉树搜索异常?

这是一棵三叉树,我想实现一个搜索来查找 id 是否在树中。该函数在当前状态下返回 NULL(这很好),即使我没有在函数末尾添加 return NULL 行,为什么?

   struct T {
    int id;
    char * name;
    struct T *left;
    struct T *middle;
    struct T *right;
};
   T* findId(T* root, int id) {
            
            if (root == NULL) {
                return NULL;
            }
        
            if (root->id == id) {
                return root;
            }
        
            T* sLeft = findId(root->left, id);
            if (sLeft != NULL) {
                return sLeft;
            }
        
            T* sMiddle = findId(root->middle, id);
            if (sMiddle != NULL) {
                return sMiddle;
            }
        
            T* sRight = findId(root->right, id);
            if (sRight != NULL) {
                return sRight;
            }
    }

回答

C 2018 6.9.1 12 说:

除非另有说明,如果}到达终止函数的 ,并且调用者使用了函数调用的值,则行为未定义。

它作为main(C 2018 5.1.2.2.3 1)的特殊情况“另行规定” ;到达}终止的main返回零(除非 的返回类型与main不兼容int)。对于您的函数,行为未定义。

在这种情况下可能发生的情况是,实现该函数的代码没有在处理器寄存器中放置任何用于返回值的特定值。它只是留下了一些先前工作中碰巧存在的任何价值。当调用者尝试使用函数调用的值时,他们会获得该寄存器中的剩余值。然而,这当然是不可靠的。您的程序可能会以其他方式失败。

编译器通常会对此发出警告。您应该启用大多数编译器警告。


以上是三叉树搜索异常?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>