gpt4 book ai didi

c - 为什么动态分配(链表/树),c

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:39 25 4
gpt4 key购买 nike

我很困惑为什么要使用动态分配以及为数据分配足够内存的概念。所以我们在我的类(class)中覆盖了链表,并且有这段代码:

NODE *BuildTree(NODE *p, const char *str)
{
if (p == NULL)
size_t length = strlen(str) + 1;
p = (NODE *)malloc(sizeof(NODE));
p->string = (char *)malloc(length);
....
}

typdef struct Node NODE;
struct NODE
{
char *string;
size_t count;
NODE *left, *right;
};

该代码应该使用用户输入的字符串创建一棵树。我假设您动态分配节点,因为您显然不知道需要多少个 child 。但是,为什么需要为要输入的字符串 str 分配大小呢?还是因为结构的定义方式而完成,并且您想分配确切的 amt,与结构说 size_t count[50] 相比,只是浪费了内存。是这个主意吗?谢谢!

最佳答案

分配字符串是因为他们使用的是 char*,字符数取决于字符串中放置的内容。

如果您的教授执行 char blah[50];,您会为其提供足够的内存以容纳 50 个字符。所以我假设他想让某人输入更多的字符,而不是静态数量的字符。

注意你教授的代码:

size_t length = strlen(str) + 1;
p = (NODE *)malloc(sizeof(NODE));
p->string = (char *)malloc(length);

strlen 给出一个字符串的长度,并为终止字符加一。现在长度可以设置为整个字符串的大小,也就是说你的教授现在可以为字符串的大小分配足够的字符字节,在本例中为(长度)。

关于c - 为什么动态分配(链表/树),c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291945/

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