Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
学习C-编译错误分配指针_C_Pointers_Malloc - Fatal编程技术网

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

学习C-编译错误分配指针,c,pointers,malloc,C,Pointers,Malloc,我是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

我是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;        
}
编译器抱怨使用了
未声明的标识符“节点”

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

请尝试
sizeof(struct Node)

尝试
sizeof(struct Node)

struct Node
应用于引用结构。如果您想让上述代码正常工作,另一种方法是
typedef
-将
struct节点
结构设置为

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

struct节点
应用于引用该结构。如果您想让上述代码正常工作,另一种方法是
typedef
-将
struct节点
结构设置为

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

欢迎来到如此美妙的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); 

否则您将出现内存泄漏。

欢迎来到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); 

否则会出现内存泄漏。

使用
struct Node
x=malloc(sizeof(*x))或者您可以
typedef strunct Node{int value;struct Node*next;}Node
但推荐@hmjd的解决方案。可能希望
free()
当您使用
struct Node
x=malloc(sizeof(*x))或者您可以
typedef strunct Node{int value;struct Node*next;}Node
但推荐@hmjd的解决方案。完成后,可能希望
免费()