C语言 - 从不兼容的指针类型分配类型[默认启用]

时间:2015-01-11 13:27:54

标签: c pointers struct variable-assignment

我对此指针列表有疑问:

struct list{
    int x;
    int y;
    struct list *next_ptr;
};

我有这个功能,每次都会遗憾地崩溃,原因可能是这种类型的分配失败了。

boolean funzione_esame(struct list **ptrptr, int *number){
    if(*ptrptr != NULL){
    struct list *tmp;
    struct list *pos;
    pos=(struct list *)malloc(sizeof(struct list));
    pos=&((*ptrptr)->next_ptr);
    *number=1;
    while(pos != NULL){
        if(pos->x <= (*ptrptr)->y){
            pos->x=(*ptrptr)->y;
            if(pos->x >= pos->y){
                tmp=pos;
                pos=&(pos->next_ptr);
                free(tmp);
                continue;
            }
        }
        pos=&(pos->next_ptr);
        ptrptr=&((*ptrptr)->next_ptr);
        *number=*number + 1;
        }
    return TRUE;
    } else return FALSE;
}

警告就在这一行:

  • pos=&((*ptrptr)->next_ptr);
  • pos=&(pos->next_ptr);

我不知道自己做错了什么,因为指针类型始终相同(struct list)。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的问题的原因[来自不兼容指针类型的类型分配]是

pos=&((*ptrptr)->next_ptr);

更改为

pos= (*ptrptr)->next_ptr;

posstruct list *(*ptrptr)->next_ptr也是。{/ p>

同样适用于pos=&(pos->next_ptr);,更改为pos= pos->next_ptr;

此外,之前的malloc()不是必需的。你正在立即指定一些指向pos的指针,从而没有使用先前分配的内存,也没有free d,造成内存泄漏。