我的作业涉及阅读汇编代码,弄清楚它的作用,然后将其编写为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);
}
答案 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;