考虑下面的代码:我们必须malloc一个结构吗?
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
我发现我越来越段错误,每当我尝试做NODEPTR的田地什么。例如: -
NodePtr node;
node->ref = 1;
所以我分配给NODEPTR一些空间,现在它似乎很好地工作。为什么是这样?我的猜测是,由于节点只是一个指针,它的字段没有内存。
于是,我就初始化NODEPTR:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
和好了,我得到这个错误:
error: expected â}â before â;â token
这归结为四个问题:
- 如果我的猜测是不正确的,如果我不使用malloc(),为什么它不工作?
- 为什么我的初始化不起作用?
- 将初始化一个结构体提供栈上的内存并解决我的问题?
- 如果没有,我有替代方案必须为我使用的每个结构分配内存吗?
你不需要'malloc'。例如,'struct Node n = {NULL,42,NULL};'。你只是在各地都有语法错误。 – juanchopanza 2014-10-05 20:05:45
如果您正在创建非指针对象,则不需要分配内存。 – Ares 2014-10-05 20:05:59
您的'NodePtr'初始化甚至不是正确的C语法,这不可能是您尝试的代码。 – 2014-10-05 20:06:11