学习C-编译错误分配指针
我是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
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的解决方案。完成后,可能希望免费()