函数会自动 return 动态分配变量吗?

does a function automatically return dynamically allocated variable?

在研究树数据结构时,我遇到了这段按顺序遍历树的代码

#include <stdio.h>

#include <stdlib.h> 

struct node 
{ 
   int data; 
   struct node* left; 
   struct node* right; 
};

struct node* newNode(int data) 
{ 
    struct node* node = (struct node*)malloc(sizeof(struct node)); 
    node->data = data; 
    node->left = NULL; 
    node->right = NULL; 
    return node;
}
void printPreorder(struct node* node) 
{ 
    if (node == NULL) 
        return; 
    printf("%d ", node->data);
    printPreorder(node->left); 
    printPreorder(node->right); 
}    

int main() 
{ 
    struct node *root = newNode(1); 
    root->left   = newNode(2); 
    root->right = newNode(3); 
    root->left->left = newNode(4); 
    root->left->right = newNode(5);  
    printf("\nPreorder traversal of binary tree is \n"); 
    printPreorder(root); 
    getchar(); 
    return 0; 
  }

在函数 newNode(int data) 中,即使我们删除了 return 语句,代码也能正常工作。 所以,我的问题是函数 newNode 是自动 returning 节点变量还是发生了其他事情?

感谢任何帮助。谢谢!

如果函数被定义为 return 一个值但没有这样做,并且调用函数试图使用 return 值,则您调用了 undefined behavior.

在您的情况下,该程序似乎可以正常运行。这是未定义行为表现出来的方式之一。这可能会随着程序的不相关更改而改变,例如添加额外的局部变量或调用 printf 进行调试。

如果函数说它 return 是一个值,你应该确保它 总是 return 是一个值。