设置和分配结构中结构的指针

时间:2013-09-29 19:34:30

标签: c pointers struct malloc

以下代码是我的问题的一个例子。我可以搜索,插入等链接列表,但我只有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结构的指针。

感谢任何帮助,我是所有这些东西的新手!

1 个答案:

答案 0 :(得分:0)

不确定哪种语法与此混淆,但您想要的只是:

master.ptr = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));

此外,您需要确保在访问NULL之前的任何成员之前进行malloc()检查。您根本没有检查过master.ptr->aliasmaster.ptr->command NULL,而是在检查master.ptr本身之前是否访问了这些值(属于master.ptr)是NULL