动态内存分配 |无法在现场书写

Dynamic memory allocation | Unable to write on location

注意: 很抱歉,如果这是重复的,但我还没有找到任何与我相似的情况。

我在做一个C语言的项目,我不擅长这个。我对动态内存分配非常陌生。所以我面临的问题是,当我创建下面给出的结构实例时

typedef struct temp_ {
    Household data;
    struct temp_ * next;
}Node, *NodePtr;

通过这种方式或我到目前为止尝试过的许多其他方式

NodePtr makeNode(Household num){
    NodePtr ptr = (NodePtr) malloc(sizeof(NodePtr));
    ptr->data = num;
    return ptr;
}

所以我得到了我无法理解的不同类型的错误。 如果有人能提供帮助,我们将不胜感激。

  1. 永远不要隐藏 typedef 后面的指针。这是非常容易出错的。在您的代码中,您没有分配足够的内存,因此出现段错误。
  2. 使用对象而不是 sizeof
  3. 中的类型
typedef struct temp_ {
    Household data;
    struct temp_ * next;
}Node;

Node *makeNode(Household num){
    Node *ptr = malloc(sizeof(*ptr));
    if(ptr) ptr->data = num;
    return ptr;
}