节点给出了垃圾值

时间:2010-04-19 17:36:11

标签: c xcode3.2

我正在做二进制树的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;    
}

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

2 个答案:

答案 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()),以便分配存储空间。