我正在开发一个程序,它将类型为client的变量存储在链表中。但是我在scanfs上遇到了分段错误。指针对我来说是新的,所以我认为name
变量有问题。服务由一个字母定义。
typedef struct{
char* name;
unsigned long number;
char service;
}Client;
struct node {
Cliente value;
struct node *next;
};
typedef struct node *LinkedListNode;
int main(){
LinkedListNode head;
Cliente aux,aux2;
char command;
head = malloc(sizeof(struct node));
head->next=NULL;
comando= getchar();
while(1){
switch(command){
case('a'):
scanf("%s",aux.name);
scanf("%lu",&aux.number);
scanf("%c",&aux.service);
if(list_search_name(head,aux)==0){
if(list_search_number(head,aux)==0)
list_insert(head,aux);
}
getchar();
break;
命令中的if链只是检查列表中是否已存在插入的名称和编号,以便插入。
我的另一个问题是:从我被告知你应该为每个free()
提供一个malloc()
,否则一些记忆会泄漏,但在这种情况下{整个程序需要{1}}变量,因为我在每个命令中都使用它来存储/搜索/获取数据。当程序关闭时我还应该释放内存吗?
答案 0 :(得分:2)
您正在使用未定义的字符串指针,导致未定义的行为。
将声明更改为:
typedef struct{
char name[32];
unsigned long number;
char service;
}Client;
和第一个scanf()
:
scanf("%31s", aux.name);
此外,您应该检查scanf()
的返回值,它是I / O,因此它可能会失败。