我已经实现了一个二进制堆作为树,树节点如下;
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分配一些内存空间时,运行时会出现"Segmentation Fault"。
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个字节。CCD_ 2又返回CCD_ 3以指示0字节的成功分配。之后,您可以取消引用NULL指针并崩溃。至于如何克服这一点,嗯。。。您必须支持p_word
为null,或者分配strlen(tok) + 1
字节,以便仅为空字符串存储