请考虑以下代码:
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成员分配值时,您必须使用' ->'但是对于普通结构(堆栈分配了一个),您必须使用' .'.
| 归档时间: |
|
| 查看次数: |
23434 次 |
| 最近记录: |