小编a52*_*a52的帖子

从函数返回对象的最佳方法是什么(C)

这在某种程度上是一个主观问题,但似乎应该有一个标准.我正在制作树状数据结构,我想知道从函数传递新节点的最佳方法.我有几个想法,但我不知道哪个是最安全/最有效的.

这是我的代码的简化:

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)

c struct pointers

2
推荐指数
1
解决办法
82
查看次数

标签 统计

c ×1

pointers ×1

struct ×1