请考虑以下代码:
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
Run Code Online (Sandbox Code Playgroud)
我发现每当我尝试使用NodePtr的字段做任何事情时,我都会遇到段错误.例如:
NodePtr node;
node->ref = 1;
Run Code Online (Sandbox Code Playgroud)
所以我为NodePtr分配了一些空间,现在它似乎工作正常.为什么是这样?我的猜测是,由于节点只是一个指针,它的字段没有内存.
所以我尝试初始化NodePtr:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
Run Code Online (Sandbox Code Playgroud)
好吧,我收到了这个错误:
error: expected â}â before â;â token
Run Code Online (Sandbox Code Playgroud)
这归结为四个问题:
ali*_*_fn 22
A struct
可以自动分配,但您使用的指针struct
不会为目标分配空间struct
.这就是你得到段错误的原因.
初始化不正确的原因是您正在初始化struct
成员,而不是struct
自身.你也是以错误的方式做这件事.
初始化有两种方法struct
:
使用堆栈分配struct
:
struct example {
int foo;
};
int main() {
struct example e;
e.foo=1;
}
Run Code Online (Sandbox Code Playgroud)使用struct
在以下帮助下分配的堆malloc()
:
struct example {
int foo;
};
int main() {
struct example *e=malloc(sizeof(struct example));
e->foo=1;
}
Run Code Online (Sandbox Code Playgroud)请注意,当您struct
从其指针(堆分配struct
)中为a成员分配值时,您必须使用' ->
'但是对于普通结构(堆栈分配了一个),您必须使用' .
'.