C 语言 - 来自不兼容指针类型的类型赋值 [默认启用]

C Language - Type assignment from incompatible pointer type [enabled by default]

我在使用此指针列表时遇到问题:

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;
}

警告在这行:

我不知道我做错了什么,因为指针类型总是一样的 (struct list)。 预先感谢您的帮助。

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

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

改为

pos= (*ptrptr)->next_ptr;

pos 是一个 struct list *(*ptrptr)->next_ptr.

也是

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

另外,前面的malloc()也不是必须的。您立即将一些其他指针分配给 pos,因此之前分配的内存未被使用,也不是 freed,造成内存泄漏。