【发布时间】:2014-10-05 20:01:39
【问题描述】:
考虑以下代码:
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
我发现每当我尝试对 NodePtr 的字段进行任何操作时都会出现段错误。例如:
NodePtr node;
node->ref = 1;
所以我为 NodePtr 分配了一些空间,现在它似乎工作正常。为什么是这样?我的猜测是,由于 node 只是一个指针,它的字段没有内存。
所以我尝试初始化NodePtr:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
好吧,我得到了这个错误:
error: expected â}â before â;â token
这归结为四个问题:
- 如果我的猜测不正确,为什么我不使用 malloc() 不起作用?
- 为什么我的初始化不起作用?
- 初始化结构会在堆栈上提供内存并解决我的问题吗?
- 如果没有,我是否可以替代为我使用的每个结构分配内存?
【问题讨论】:
-
你不需要
malloc。例如,struct Node n = {NULL, 42, NULL};。你只是到处都有语法错误。 -
创建非指针对象时不需要分配内存。
-
您的
NodePtr初始化甚至不是正确的 C 语法,这不可能是您尝试过的代码。 -
请一次只问一个问题,并投入更多精力来阅读内容,区分不同的概念,在启用编译器的所有警告的情况下先进行测试...
-
@Jens Gustedt,我对语法错误负责,但我认为这些是您对某人的强烈假设。我注意到语法错误,因为它是我使用 malloc 解决方案的一部分。