学习 C - 编译分配指针的错误



我是 C 的新手,正在尝试编译这个简单的代码,但它不起作用,我也不确定为什么。谁能帮我?

int main(int argc, const char * argv[])
{
    struct Node{
        int value;
        struct Node *next;
    };
    struct Node* x;
    struct Node* y;
    struct Node* z;
    x = malloc(sizeof(Node));
    y = malloc(sizeof(Node));
    z = malloc(sizeof(Node));
    return 0;        
}

编译器抱怨使用undeclared identifier ‘Node’

x = malloc(sizeof(Node));
y = malloc(sizeof(Node));
z = malloc(sizeof(Node));

欢迎来到 SO 和 C 的精彩世界!

给你一些提示:

从语法上讲,在函数内定义结构没有

问题,但通常在函数外部定义结构,以便可以在其他函数中使用。例如:

main(){ 
  struct nodedef{vars};
  add_to_node(node var);
}
add_to_node(node var)
{
   // How can I add a to a node when I don't know what that is?
}
您的

代码的主要问题是您稍后没有正确引用您的节点,如果我删除:

struct me {
    int i;
};

然后每当我引用这种类型的结构时,我都必须再次明确地说struct

struct me myself;
myself = malloc(sizeof(struct me));
myself.i = 5;

避免重用 struct 关键字的方法是使用以下typedef

typedef struct me {
    int i;
}m;
m myself;
myself = malloc(sizeof(m));
myself.i = 5;

最后一点是,任何时候你通过分配一些内存malloc()确保你调用free()来释放该内存:

free(myself); 

否则会出现内存泄漏。

改用sizeof(struct Node)

应该

使用struct Node来指代结构。如果您希望上面的代码有效,另一种方法是将struct Node结构typedef

typedef struct Node {
    int value;
    struct Node *next;
} Node;

相关内容

  • 没有找到相关文章