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

标签 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)。 预先感谢您的帮助。

最佳答案

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

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

更改为

pos= (*ptrptr)->next_ptr;

pos 是一个 struct list *(*ptrptr)->next_ptr 也是如此。

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

此外,前面的 malloc() 也不是必需的。您立即将其他一些指针分配给 pos,因此先前分配的内存不会被使用,也不会被free释放,从而造成内存泄漏。

关于C 语言 - 来自不兼容指针类型的类型赋值 [默认启用],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887618/

相关文章:

c++ - 如何解决这个 Unresolved 断点警告?

c - scanf() 函数中的扫描集有什么区别?

c++ - 错误分配给具有数组类型的表达式

Swift - 从枚举错误返回字符串

c - 错误前的预期表达

c - 如何在C中实现单链表

c - 理解定点位模型

c - 在c中指针变量保存的地址上使用模数

c - 为什么使用此 C 代码会出现段错误?

c - 将字符串分配给结构中的指针 - 链表 C