C,如何使用这个树结构

时间:2013-02-22 06:11:33

标签: c pointers struct

我的作业涉及阅读汇编代码,弄清楚它的作用,然后将其编写为C代码。我很难理解如何使用给定的C代码,它是这样的:

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

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分: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;