这在某种程度上是一个主观问题,但似乎应该有一个标准.我正在制作树状数据结构,我想知道从函数传递新节点的最佳方法.我有几个想法,但我不知道哪个是最安全/最有效的.
这是我的代码的简化:
typedef struct Node {
struct Node *left;
struct Node *right;
int value;
} Node;
int f() {
//do stuff
}
Node *new_node() {
Node n = {NULL, NULL, f()};
return &n;
}
int main() {
Node a = {new_node(), new_node(), 0};
}
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,因为new_node()函数返回的指针指向堆栈分配的数据,一旦new_node()结束就会释放.但是解决这个问题的最佳方法是什么?
一种可能性是n在堆上分配,如下所示:
Node *new_node() {
Node *n = (Node *) malloc(sizeof(Node)); //unsure if the cast is necessary here, but that's not relevant
n->left = NULL;
n->right = NULL;
n->value = …Run Code Online (Sandbox Code Playgroud)