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

标签 c malloc

我很困惑为什么要使用动态分配以及为数据分配足够内存的概念。所以我们在我的类(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/

相关文章:

c - gnu gdb malloc 返回不可访问的指针

c - 将未指定数量的命令行输入放入 C 中的数组中

c - 用于解析 linux 配置文件的库?

c - 如何使用信号安全函数将格式化字符串写入文件?

c++ - malloc 分配给指针

c++ - malloc 没有按我的预期工作

C分配不同大小的二维数组

C ABI 与 LLVM

一段代码会干扰循环吗?

c - 这个 if 语句如何避免使用分号?