#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
}list;
list* creat(void)
{
list *new;
new=(list*)malloc(sizeof(struct node));
new->a=5;
return new;
}
int main()
{
list *List=creat();
printf("%d",List->a);
}
在create函数中建立一个新的结构体指针并为结构体成员赋值,返回给List,为什么会报错
把new改成其他的标识符就好了
LIST不是内置的吗,你不能重名
你的代码中存在一个小错误,sizeof(struct node)
应该改为 sizeof(list)
,因为 list
是 struct node
的别名,而 sizeof
运算符需要的是类型的大小,而不是类型名。
以下是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
} list;
list* creat(void)
{
list *new;
new = (list*)malloc(sizeof(list));
new->a = 5;
return new;
}
int main()
{
list *List = creat();
printf("%d", List->a);
free(List); // 记得释放内存
return 0;
}
注意,在使用完动态分配的内存后,需要使用 free
函数释放内存,避免内存泄漏。
我这里不报错,运行的好好的呀
到底报什么错,放出来看看,是不是你用vs了
答案:
在一个create函数中正确建立一个新的结构体指针,为它的成员赋值,并返回给List的步骤如下:
#define LEN 100
typedef struct {
int id;
char name[LEN+1];
char gender;
} student;
student* create_student(int id, char* name, char gender)
{
student* st = (student*)malloc(sizeof(student));
st -> id = id;
strncpy(st -> name, name, LEN+1);
st -> gender = gender;
return st;
}
void add_student(ListNode** pphead, int id, char* name, char gender)
{
student* st = create_student(id, name, gender);
ListNode* p = (*pphead) -> prev;
p -> next -> prev = st;
st -> next = p -> next;
p -> next = st;
st -> prev = p;
}
ListNode* p = (*pphead) -> next;
while(p != *pphead)
{
ListNode* q = p -> next;
free(p -> data);
free(p);
p = q;
}
free(*pphead);
*pphead = NULL;
通过以上步骤,应该就能够正确创建结构体指针并为其成员赋值,并返回给List了。