我在使用此指针列表时遇到问题:
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/