iCAx开思工具箱

标题: 【求助】高手帮我看看下面的代码有什么问题? [打印本页]

作者: tari    时间: 2004-6-17 10:54
标题: 【求助】高手帮我看看下面的代码有什么问题?
logical rect_pocket_is_deep(tag_t feat)
{
  int edit=0;
  char *length;
  char *corner_rad;
  char *floor_rad;
  char *taper_angle;
  char **ptr;
  char *lhs_str;
  char *rhs_str;
  char *endptr;
  tag_t exp_tag;
  double depth;
  logical logic;
  UF_MODL_ask_rect_pocket_parms(feat,edit,[$length,&corner_rad,&floor_rad,&taper_angle)]
  ptr=[$length]
  ptr=ptr+2;
  UF_MODL_dissect_exp_string(*ptr,[$lhs_str,&rhs_str,&exp_tag)]
    depth=strtod(rhs_str,[$endptr)]
  logic=(depth>1);
  return logic;
}
大家帮帮我吧
作者: wflying    时间: 2004-6-17 11:09
编译时出现什么错误??
作者: tari    时间: 2004-6-17 14:08
编译没问题,但执行时,弹出错误:internal memory access
这个函数只是一个子函数,我调试时发现返回调用时p1变成一个没用的指针0xfffffff2,下面是调用的一部分代码
feat1=p1->feature;
UF_MODL_ask_feat_type(feat1,[$feat_type)]
if(!strcmp(feat_type,"RECT_POCKET"))
  logic=rect_pocket_is_deep(feat1);
我把rect_pocket_is_deep注释调,执行没问题
作者: tari    时间: 2004-6-17 15:34
为了方便大家帮我查找问题,我把相关的代码全弄上来,呵呵
logical rect_pocket_is_deep(tag_t feat)
{
  int edit=0;
  char *length;
  char *corner_rad;
  char *floor_rad;
  char *taper_angle;
  char **ptr;
  char *lhs_str;
  char *rhs_str;
  char *stop_at;
  tag_t exp_tag;
  double depth;
  logical logic=false;
  UF_MODL_ask_rect_pocket_parms(feat,edit,[$length,&corner_rad,&floor_rad,&taper_angle)]
  ptr=[$length]
  ptr=ptr+2;
  UF_MODL_dissect_exp_string(*ptr,[$lhs_str,&rhs_str,&exp_tag)]
    depth=strtod(rhs_str,[$stop_at)]
  logic=(depth>10);
  return logic;
}
  
void search_deep_cavity(struct feat *head)
{
  struct feat *p1,*p2;
  p1=head;
  logical logic=true;
  tag_t feat1;
  char *feat_type=NULL;
  while(p1!=NULL)
  {   
    feat1=p1->feature;
    UF_MODL_ask_feat_type(feat1,[$feat_type)]
     if(!strcmp(feat_type,"GENERAL_POCKET"))
            logic=general_pocket_is_deep(feat1);
          else if(!strcmp(feat_type,"SIMPLE HOLE"))
                     logic=hole_is_deep(feat1);
             else if(!strcmp(feat_type,"SWP104"))
                      logic=extrusion_is_deep(feat1);
                else if(!strcmp(feat_type,"CYL_POCKET"))
              logic=cyl_pocket_is_deep(feat1);
                 else if(!strcmp(feat_type,"RECT_POCKET"))
                               logic=rect_pocket_is_deep(feat1);
                 
       
     if(logic==false)
     {
    if(p1==head) {p1=p1->next;head=p1;}
      else         {p2->next=p1->next;p1=p1->next;}
     }
     else
     {
       p2=p1;
       p1=p1->next;
       
       }
  }
  
}
作者: tari    时间: 2004-6-18 10:45
555,没人顶啊!
zzz斑竹及各位高手指点一下吧
作者: tari    时间: 2004-6-18 13:35
我把子函数的代码直接拷到调用的地方,执行就没问题,问题虽然解决了,但是还是没明白为什么?
作者: qingwufy    时间: 2004-6-21 17:10
你的子函数有问题!
你的子函数中的feat是传不出去的
作者: liberty000    时间: 2004-6-22 09:50
凡是这个internal memory access 问题,都是参数不对。比如是要feature,你给的是body。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3