gpt4 book ai didi

c - 我们必须 malloc 一个结构吗?

转载 作者:太空狗 更新时间:2023-10-29 16:58:16 25 4
gpt4 key购买 nike

考虑以下代码:

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

这归结为四个问题:

  1. 如果我的猜测不正确,为什么我不使用 malloc() 它就不起作用?
  2. 为什么我的初始化不起作用?
  3. 初始化结构体是否会在堆栈上提供内存并解决我的问题?
  4. 如果没有,我是否有替代方法来为我使用的每个结构分配内存?

最佳答案

A struct可以自动分配,但您使用的是指向 struct 的指针这不会为目标分配空间 struct .这就是您遇到段错误的原因。

您的初始化不正确的原因是您正在初始化 struct 成员,而不是 struct本身。你也以错误的方式这样做。

初始化 struct 有两种方法:

  1. 使用分配的堆栈 struct :

    struct example {
    int foo;
    };
    int main() {
    struct example e;
    e.foo=1;
    }
  2. 使用分配的堆 structmalloc()的帮助下:

    struct example {
    int foo;
    };
    int main() {
    struct example *e=malloc(sizeof(struct example));
    e->foo=1;
    }

请注意,当您为 struct 的成员赋值时从它的指针(堆分配 struct )你必须使用 ' -> ' 但对于普通结构(堆栈分配一个)你必须使用 ' . ' .

关于c - 我们必须 malloc 一个结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com