gpt4 book ai didi

c - 即使使用 malloc 和 strcpy 时,多个节点值也都指向相同的值

转载 作者:行者123 更新时间:2023-11-30 20:50:24 25 4
gpt4 key购买 nike

编辑:只是想学习 C,并且有 Python 背景,希望我不会因此而受到太多反对。

我有这个结构:

struct TreeNode {
char *value;
struct TreeNode *sibling;
struct TreeNode *child;
};

我有这个代码来创建节点:

struct TreeNode* create_node(const char* value) {
struct TreeNode node;
node.value = malloc(sizeof(char) * (strlen(value) + 1));
strcpy(node.value, value);
node.sibling = NULL;
node.child = NULL;
struct TreeNode* node_ptr = &node;
return node_ptr;
}

这是另一个创建节点的函数中的代码(其中值是字符串数组):

struct TreeNode a = create_node(values[0]);
struct TreeNode b = create_node(values[1]);
struct TreeNode c = create_node(values[2]);
struct TreeNode d = create_node(values[3]);
printf("%s\n", a->value);
printf("%s\n", b->value);
printf("%s\n", c->value);
printf("%s\n", d->value);

当我编译并运行它时,它会打印 values[3] 四次(这意味着节点 a、b、c 和 d 的值都是 values[3] >)。

问题 1)为什么它们都具有相同的值?

注意:正常工作的代码是:

struct TreeNode* create_node(const char* value) {
struct TreeNode* node = malloc(sizeof(struct TreeNode));
node->value = malloc(strlen(value) + 1);
strcpy(node->value, value);
node->child = NULL;
node->sibling = NULL;
return node;
}

问题2)为什么后者有效,而前者无效?

问题 3)在后者中,不应该是 node->value = malloc(sizeof(char) * (strlen(value) + 1)); 而不仅仅是 节点->值 = malloc(strlen(值) + 1);?

最佳答案

struct TreeNode* create_node(const char* value) {
struct TreeNode node;
node.value = malloc(sizeof(char) * (strlen(value) + 1));
strcpy(node.value, value);
node.sibling = NULL;
node.child = NULL;
struct TreeNode* node_ptr = &node;
return node_ptr;
}

struct node 是该函数的本地结构,因此当函数返回时它就不再存在。但你返回一个指向它的指针。调用者应该如何处理指向不再存在的对象的指针?

关于c - 即使使用 malloc 和 strcpy 时,多个节点值也都指向相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com