0

我正在做二叉树的c程序,同时在2或3个节点之后将节点插入到树中,子节点具有垃圾值并且崩溃我在xcode中做任何想法......

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;    
}

这就是我创建节点并将其插入树的方式。

4

2 回答 2

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

PS:[1] C 中不需要显式转换(Bnode)。

于 2010-04-20T03:14:22.407 回答
1

您为节点声明了一个指针,但实际上并没有为它分配任何存储空间,因此您有一个悬空指针。您需要为每个新节点调用malloc()(或calloc()),以便分配存储。

于 2010-04-19T17:59:39.260 回答