【发布时间】:2015-03-09 08:54:20
【问题描述】:
这个指针列表有问题:
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)。
提前感谢您的帮助。
【问题讨论】:
-
嗯,你介意格式化一下你的代码吗?
-
任何时候你有
ptrvar = allocation_func(...);紧跟ptrvar = something else;在你的代码中放置一个巨大的红旗,因为在最好你只是编写了一个大胆的内存泄漏。并且这两个警告都是正确的(如果你正在编译,应该是错误的)。类型不匹配。最后,你的代码应该做什么? -
你的pos变量和next_ptr是同类型的,是struct list*,赋值pos时不需要& ->next_ptr 到 pos。请格式化您的代码,可能会出现更多问题,并且没有人会深入研究您格式化错误的代码。
标签: c pointers struct variable-assignment