Bnode createTreeNode()
{
Bnode node=(Bnode)malloc(sizeof(Bnode));
return node;
}
Bnode addTreeNode(Bnode inNode, char *inData)
{
int compareValue;
if (inNode == NULL)
{
inNode = createTreeNode();
inNode->leftNode=NULL;
inNode->rightNode=NULL;
stpcpy(inNode->data,inData);
}
else if((compareValue=strcmp(inData,inNode->data))==0)
{
inNode->count=inNode->count+1;
}
else if(compareValue>1)
{
inNode->rightNode=addTreeNode(inNode->rightNode,inData);
}
else
{
inNode->leftNode = addTreeNode(inNode->leftNode,inData);
}
return inNode;
}
这就是我创建节点并将其插入树的方式。
答案 0 :(得分:2)
Bnode node=(Bnode)malloc(sizeof(Bnode)); //[1]
return node;
malloc的参数是要分配的动态内存的大小。
您提供了指向结构的指针大小作为参数,而不是结构本身的大小。
因此,将更少的内存分配给Bnode
,最终您必然会获得垃圾值和分段错误。
将其更改为
Bnode node = malloc(sizeof(struct _bnode));
//where Bnode is pointer to struct _bnode
P.S。:[1] C中不需要显式强制转换(Bnode)。
答案 1 :(得分:1)
您为节点声明了一个指针,但实际上并没有为它分配任何存储空间,因此您拥有dangling pointer。您需要为每个新节点调用malloc()
(或calloc()
),以便分配存储空间。