我对此指针列表有疑问:
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
)。
在此先感谢您的帮助。
答案 0 :(得分:1)
您的问题的原因[来自不兼容指针类型的类型分配]是
pos=&((*ptrptr)->next_ptr);
更改为
pos= (*ptrptr)->next_ptr;
pos
是struct list *
,(*ptrptr)->next_ptr
也是。{/ p>
同样适用于pos=&(pos->next_ptr);
,更改为pos= pos->next_ptr;
此外,之前的malloc()
不是必需的。你正在立即指定一些指向pos
的指针,从而没有使用先前分配的内存,也没有free
d,造成内存泄漏。