2013-02-22 70 views
0

我有一個任務,涉及讀取彙編代碼,搞清楚它的功能,然後將其編寫爲C代碼。我有一個很難理解如何使用,雖然在給定的C代碼,它是這樣的:C,如何使用這棵樹struct

typedef struct ELE *tree_ptr; 

struct ELE { 
    long val; 
    tree_ptr left; 
    tree_ptr right; 
}; 

有了這個原型(如果該事項):

long traverse(tree_ptr tp); 

有人能告訴我如何正確創建一個,設置其val字段,並打印出來?這將導致分段錯誤:

int main() { 
    tree_ptr tp; 
    tp->val = 5; 
    //printf("%lu\n", tp->val); 
} 

回答

1

tree_ptr是一個指向struct ELE

所以,你的代碼是類似於

struct ELE * tp; 
tp->val = 5; 

在上面的代碼中,你已經創建了一個指針struct ELE,但它實際上並不指向任何有效的內存區域。

要解決你的代碼,試試這個

// allocation on heap 
tree_ptr tp = malloc(sizeof(struct ELE)); 
tp->val = 5; 

,或者你可以嘗試...

// allocation on stack 
struct ELE tp; 
tp.val = 5; 
+2

您需要分配空間,並設置指針或者'巾 - > val'會做壞事。 – 2013-02-22 06:13:52

+0

謝謝,我不知道我必須分配空間。新的C,指針和結構 – asimes 2013-02-22 06:18:33

+0

@asimes不用客氣:-)這裏是關於C指針的簡短教程http://www.openismus.com/documents/cplusplus/cpointers.shtml – 2013-02-22 06:20:29

2

tree_ptr真的只是一個ELE *。重要的部分是*。這是一個指針。它需要記憶。指針需要與有效的內存地址相關聯,然後才能使用它們。一些可能的選項是:

選項1:

tree_ptr tp; 
tp = malloc(sizeof(*tp)); // allocate memory for it, don't forget to free() it! 

選項2:

struct ELE tp; // Don't even use a pointer at all... 
+0

你,我想我必須嘗試將它理解爲'tree_ptr tp',因爲它在原型中。 – asimes 2013-02-22 06:19:51