笔者在调试程序时,发现个问题如下:
下面是一个对的树的节点进行排序的函数:(其中节点中存有各个字段属于的层次和统计数目)
int myqsort(void *head, char **grpset, char level, int grpnum)
{
if(level >= grpnum) return -1;
int i;
char order_flag, order_rule;
SlasDummy *root = NULL;
SlasRD pnode;
order_flag = grpset[sort_lever][0];
order_rule = grpset[sort_lever][1];
root=(SlasDummy *) head;
for(i=0; i < root->ssize; i++){
pnode = (SlasRD)root->array[i];//这里报错:void 值未如预期地被忽略
if(pnode.sd->ssize != 0 && level < grpnum){
level++;
myqsort(pnode.sd, grpset, level, grpnum);
if(order_flag == 'v'){
if(order_rule == '+'){
qsort(pnode.sd->array, pnode.sd->ssize, sizeof(SlasRD), compar);
}else if(order_rule == '-'){
qsort(pnode.sd->array, pnode.sd->ssize, sizeof(SlasRD), compar1);
}
}
}
return 0;
}
检查发现:array是void * 类型的,一个void类型,没有返回值是不能被拿来比较的。于是代码修改一下,改用指针:
SlasRD *pnode=NULL;
pnode = root->array;
问题解决。
总结:下次碰到这种错误,可以再使用前注意,直接用其他方法,比如指针,就能防止类似问题的发生了。
阅读(1442) | 评论(0) | 转发(0) |