以下代码是我的问题的一个例子。我可以搜索,插入等链接列表,但我只有1个链表。因此,我想更改所有的访问器函数,以允许传递包含将要处理的成员的结构,以便轻松分配var_alias_t类型的新链接列表。
此代码工作正常,但希望修改以允许此函数和其他人修改var_alias_t类型的多个列表。
struct var_alias_t
{
char *alias;
char *command;
struct var_alias_t *next;
};
struct var_alias_t *ptr = NULL;
struct var_alias_t *head = NULL;
struct var_alias_t *curr = NULL;
struct var_alias_t* var_alias_ll_create_list(char *alias, char *cmd)
{
printf("\n creating list with headnode as [%s,%s]\n",alias,cmd);
struct var_alias_t *ptr = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
ptr->alias = malloc(strlen(alias)+1);
ptr->command = malloc(strlen(cmd)+1);
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
strcpy(ptr->alias,alias);
strcpy(ptr->command,cmd);
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
我尝试更改代码。
struct var_alias_t
{
char *alias;
char *command;
struct var_alias_t *next;
};
struct var_alias_t *ptr = NULL;
struct var_alias_t *head = NULL;
struct var_alias_t *curr = NULL;
typedef struct
{
struct var_alias_t *ptr;
struct var_alias_t *head;
struct var_alias_t *current;
}ll_tracking_t;
ll_tracking_t ll_var = {NULL,NULL,NULL};
ll_tracking_t ll_alias = {NULL,NULL,NULL};
struct var_alias_t* Xvar_alias_ll_create_list(char *part1, char *part2,ll_tracking_t master)
{
printf("\n creating list with headnode as [%s,%s]\n",part1,part2);
struct var_alias_t *(master.ptr) = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
master.ptr->alias = malloc(strlen(part1)+1);
master.ptr->command = malloc(strlen(part2)+1);
if(NULL == master.ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
strcpy(master.ptr->alias,part1);
strcpy(master.ptr->command,part2);
//ptr->alias = alias;
//ptr->command = cmd;
master.ptr->next = NULL;
//strcpy(*Items,Data) ; // Here we copy it
master.head = master.current = master.ptr;
return master.ptr;
}
我得到的错误在下面一行是"错误:预期')'之前'。'令牌"
struct var_alias_t *(master.ptr) = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
我的理解是我猜错了,但上述陈述意味着。 设置名为ptr的主结构成员的值,它是一个指向malloced内存位置的指针,var_alias_t结构的大小,带有var_alias_t结构的指针。
感谢任何帮助,我是所有这些东西的新手!
答案 0 :(得分:0)
不确定哪种语法与此混淆,但您想要的只是:
master.ptr = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
此外,您需要确保在访问NULL
之前的任何成员之前进行malloc()
检查。您根本没有检查过master.ptr->alias
或master.ptr->command
NULL
,而是在检查master.ptr
本身之前是否访问了这些值(属于master.ptr
)是NULL
。