0

我有一项任务,其中涉及阅读汇编代码,弄清楚它的作用,然后将其编写为 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);
}
4

2 回答 2

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...
于 2013-02-22T06:15:29.467 回答
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;
于 2013-02-22T06:13:13.973 回答