apple06 发表于 2003-6-17 17:29:00

[求助]ARX程序开发中出现的异常处理该如何解决

我是ARX的新手,创建一个函数,提示用户选择文件,获取文件中的圆,更改圆的颜色和直径,并将圆放回原文件,编译通过.但在AutoCAD中加载此ARX文件并运行时,提示:未处理的异常 C0000005 (Accecc Violation Reading Ox001c),地址6545F306h.
请高手指教!

zfbj 发表于 2003-6-18 11:56:00

能否附上源文件?

catherine011 发表于 2003-6-19 11:28:00

原因如下

我原来也遇到了这个问题,一般这种情况主要是因为指针或者数组没有初始化造成的,或者是因为堆栈溢出。仔细检查你定义的指针和数组,给他们都初始化,然后你看看你的数组是不是太大了?改小一点儿。

apple06 发表于 2003-6-23 21:46:00

请多指教

zfbj 发表于 2003-6-24 10:51:00

你的错误,呵呵,让我费了半填劲

看你下面的代码:
for (pWorkSetIter->start(); !pWorkSetIter->done();pWorkSetIter->step());*****这里怎么了?呵呵
                        {
                                AcDbEntity *pEntity;
                                acdbOpenAcDbEntity(pEntity,pWorkSetIter->objectId(),AcDb::kForWrite);
                                pEntity->setColorIndex(colorIndex);
                                ((AcDbCircle *)pEntity)->setRadius(radius);
                                pEntity->close();
                        }
                        delete pWorkSetIter;

apple06 发表于 2003-6-24 11:08:00

谢谢

多谢啦

zfbj 发表于 2003-6-24 12:21:00

不客气,欢迎你经常来明经做客。

: )

leeyeafu 发表于 2003-6-25 14:56:00

看了你的源程序,给点编程风格的意见

首先,你的程序写得不错,能实现你想要的功能(除了Z版主说的那个多余的分号外)。但整个程序中没有一句注释代码,大降低了程序的可读性。好的编程习惯是在编写代码的同时,加上必要的一些注释。
另外,你在遍历块表记录的循环中使用这样的代码:
AcDbEntity *pEnt;            //详细语句可能有点小差异
...
pEnt->close();
这样,块表中有多少实体对象,就要建立并析构多少次AcDbEntity对象。若将以上两行代码移到循环外部,并不影响程序的正确性,但它只需要建立和析构一次ADbEntity对象,可能你认为这对程序执行效率影响不大。(实际上,若用户打开的文件有很多AcDbEntity实体对象时,效率将明显降低。)但严重影响你的程序质量,不是吗?
长事务(Z版主建议翻译为“远程处理”,我认为“远程事务”可能更准确,不过这是另外一个话题)循环中也存在同样的问题。

Big001 发表于 2003-8-1 10:50:00

*******************************************
AcDbEntity *pEnt;            //详细语句可能有点小差异
...
pEnt->close();
*******************************************
上面两句不能放到外面,否则就错了,另外,放到外面性能并不能提高,AcDBEntity× pEnt是在栽中分配内存不是堆分配,内存的大小只有4个字节,对性能根本没有影响。
页: [1]
查看完整版本: [求助]ARX程序开发中出现的异常处理该如何解决