Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91510
  • 博文数量: 16
  • 博客积分: 367
  • 博客等级: 一等列兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-25 22:37
文章分类

全部博文(16)

文章存档

2012年(4)

2011年(12)

我的朋友

分类: C/C++

2011-12-26 19:33:37

笔者在调试程序时,发现个问题如下:
 
下面是一个对的树的节点进行排序的函数:(其中节点中存有各个字段属于的层次和统计数目)
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;
问题解决。
 
总结:下次碰到这种错误,可以再使用前注意,直接用其他方法,比如指针,就能防止类似问题的发生了。
 
阅读(5126) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~