- 积分
- 376
- 明经币
- 个
- 注册时间
- 2004-1-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 作者 于 2004-5-18 17:13:23 编辑
这是我在ARX下编的程序,目的是在AutoCAD中由用户选择明细栏对角上的两点,然后显示出明细栏中的文本。但是,编译无误后,在ARX中运行,选择完两个点后,便弹出对话框:未处理的异常c000005(Access violation reading 0xf28abd),地址:77FCB84DH。
这到底是怎么回事?各位,这是我的毕业设计,过几天就要交差了。我很认真的改了几天,但是还是不行。事关毕业,请帮帮忙看看,给点意见!!!我刚才试了一下。程序运行到第一个acedlength()就停止了.
经过测试,程序到了acutPrintf(tent1),便出错,而且会导致CAD自动关机
大家,帮帮忙啊!斑竹,帮帮忙!麻烦大家了
struct resbuf *entitem(struct resbuf *rchain,int gcode)
{ while((rchain!=NULL)&&(rchain->restype!=gcode)) rchain=rchain->rbnext; return rchain; }
void skyextraextra() { // TODO: Implement the command ads_point pt1,pt2,ori,ter,insert; ads_name s1,set,s2; struct resbuf eb1,eb2,*list1,*tent1,*list2,*tent2; char sbuf1[101],sbuf2[10]; long num1,num2,m; double y[100],x[100],*a,*b,n; int tx,ty,i,k,N,p1,p2,d,stat; if((stat=acedGetPoint(NULL,"please pick up the first point\n",pt1))!=RTNORM)// acutPrintf("failed in picking the first point\n"); if((stat=acedGetPoint(NULL,"please pick up the second point\n",pt2))!=RTNORM)// acutPrintf("failed in picking the second point\n"); eb1.restype=0; strcpy(sbuf1,"LINE"); eb1.resval.rstring=sbuf1; eb1.rbnext=NULL; acedSSGet("w",pt1,pt2,&eb1,s1); if(acedSSLength(s1,&num1)!=RTNORM) return ; a=x; b=y; for(m=0;m<num1-1;m++) { if(acedSSName(s1,m,set)!=RTNORM) return ; list1=acdbEntGet(set); tent1=entitem(list1,10); ori[X]=tent1->resval.rpoint[X]; ori[Y]=tent1->resval.rpoint[Y]; tent1=entitem(list1,11); ter[X]=tent1->resval.rpoint[X]; ter[Y]=tent1->resval.rpoint[Y]; if(ori[X]=ter[X]) { *a=ori[X]; a++; tx++; } else { *b=ori[Y]; b++; ty++; } } acutRelRb(list1); acutRelRb(tent1); acedSSFree(s1); for(i=0;i<tx-1;i++) for(k=0;k<tx-1;k++) if(x<x[k]) { n=x[k]; x=n; x[k]=x; } for(i=0;i<ty-1;i++) for(k=0;k<ty-1;k++) if(y<y[k]) { n=y[k]; y=n; y[k]=y; } N=(tx-1)*(ty-1); char s[100][10]; char w[10]; eb2.restype=0; strcpy(sbuf2,"TEXT"); eb2.resval.rstring=sbuf1; eb2.rbnext=NULL; acedSSGet("w",pt1,pt2,&eb2,s2); if(acedSSLength(s2,&num2)!=RTNORM) return ;
for(m=0;m<num2-1;m++) { if(acedSSName(s2,m,set)!=RTNORM) return ; list2=acdbEntGet(set); tent2=entitem(list2,1); strcpy(w,tent2->resval.rstring); tent2=entitem(list2,10); insert[X]=tent2->resval.rpoint[X]; insert[Y]=tent2->resval.rpoint[Y]; for(i=0;i<tx-1;i++) { if((x<insert[X])&&(x[i+1]>=insert[X])) p1=i; break; } for(i=0;i<ty-1;i++) { if((y<insert[Y])&&(y[i+1]>=insert[Y])) p2=i; break; } d=(tx-1)*p2+p1; strcpy(s[d],w); acutRelRb(list2); acutRelRb(tent2); acedSSFree(s2); } for(i=0;i<tx-1;i++)
{ acutPrintf("%s ",s); if(i%(ty-1)==0) acutPrintf("/n"); } }
|
|