gpt4 book ai didi

c - 构建节点时内存分配失败

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

我实现了一个二叉堆树,树节点如下;

struct tree_node {
char* p_word;
int count;
struct tree_node* parent;
struct tree_node* p_left;
struct tree_node* p_right;
};

在涉及到 char* 成员之前,一切都完美无缺。当我尝试为 p_word 分配一些内存空间时,在运行时出现“段错误”。

fgets(buffer, BUFFERSIZE, fp);
for(tok = strtok(buffer, " "); tok; tok = strtok(0, " ")) {
if(tok) {
curr = (lpnode)malloc(sizeof(node));
curr->p_left = curr->p_right = NULL;
curr->count = 1;

curr->p_word = (char*)malloc(sizeof(char) * strlen(tok));
strcpy(curr->p_word, tok);

insert(&root, &root, curr);
}
}
fclose(fp);

请注意,curr 表示将要添加到树中的节点,root 表示树的根节点。

如何在不导致任何内存泄漏的情况下解决这个问题?

最佳答案

您必须检查 strlen(tok) 是否为正。否则你将尝试分配 0 个字节。 malloc 依次返回 NULL 以指示成功分配 0 字节。之后,您取消引用 NULL 指针并崩溃。至于如何克服这个问题,嗯......你必须支持 p_word 为 null,或者分配 strlen(tok) + 1 字节,例如,存储 \0 仅适用于空字符串。

关于c - 构建节点时内存分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435049/

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