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

标签 c malloc

我很困惑为什么要使用动态分配以及为数据分配足够内存的概念。所以我们在我的类里面介绍了链表,并且有这样的代码:

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/

相关文章:

VS2012中的C2059 : How to initialize struct instance?

c - 标准输入来自键盘或文件

C在结构内释放多维数组似乎不正确

c - 当我分配错误的内存量时,为什么 C 不会崩溃

c - 尝试释放内存时出错

c++ - 如何在 C++ 中创建一个位于堆而不是堆栈的数组?

c - 字符串和malloc ...出了什么问题?

c - 禁止 C 预处理器更改变量名

c - pow(1,0) 返回 0?

c - 函数和字符串,检查输入字符串是否匹配