2010-04-19 85 views
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;  
} 

這是我如何創建節點並將其插入到樹中。

+3

你可以張貼一些代碼,好嗎? – Syntactic 2010-04-19 17:37:07

+5

錯誤在第42行。 – 2010-04-19 17:43:37

+0

@Jerry:你的編輯器必須搞砸了。我的錯誤行是#24!你甚至在看同樣的代碼?! – sbi 2010-04-19 17:56:59

回答

1

您爲節點聲明瞭一個指針,但實際上並沒有爲它分配任何存儲空間,因此您有一個dangling pointer。您需要爲每個新節點調用malloc()(或calloc()),以分配存儲空間。

+0

該死的,你很好。好的,這個怎麼樣。我有這個程序應該做這件事,但它崩潰。你能幫我嗎? – RarrRarrRarr 2010-04-19 20:33:29

+2

@RarrRarrRarr:當然 - 我知道你出錯的地方 - 把if(x = 0)改爲if(x == 0) - 應該修正它。 '';-) – 2010-04-19 20:58:39

2
Bnode node=(Bnode)malloc(sizeof(Bnode)); //[1] 
    return node; 

參數的malloc是動態存儲器的被分配的大小。

您提供大小的指針的struct作爲參數,而不是尺寸的結構本身。
因此,將更少的內存分配給Bnode,最終你必然會得到垃圾值和分段錯誤。


它更改爲類似

Bnode node = malloc(sizeof(struct _bnode)); 
//where Bnode is pointer to struct _bnode 

P.S:[1] C.無需顯式轉換(B節點)