找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1554|回复: 6

[求助]:请教一个AcDbVoidPtrArray类型的变量释放不了内存

[复制链接]
发表于 2006-2-28 18:59:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
void dumpCustomEntity(AcDbEntity *pEnt)
{
   AcDbProxyEntity *pProxyEntity = AcDbProxyEntity::cast(pEnt);
   if(pProxyEntity )
   {
      AcDbVoidPtrArray pArray;
      pProxyEntity->explode(pArray);
      for(int i = 0;i<pArray.length();i++)
      dumpEntity((AcDbEntity *)pArray.at(i));  //dumpEntity()  //是一个分析Entity的函数

   }
}

我可以通过上面的代码 把proxy entity 炸开,也可以访问炸开后的
数据成员,但是在退出这个函数的时候提示
" _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)".
我发现是pArray的内存释放不掉
这是什么问题?
请指教,谢谢!
for 循环为
for(int i = 0;i<pArray.length();i++)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-3-9 21:03:04 | 显示全部楼层
给pArray设一个长度,setPhysicalLength就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-10 13:47:55 | 显示全部楼层
用:
for(i=0; i<pArray.logicalLength(); i++)
{
delete (AcDbObject *)pArray;
}


小于号后面的显示不出来,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-4-30 17:23:41 | 显示全部楼层
luk1114 发表于 2006-3-9 21:03
给pArray设一个长度,setPhysicalLength就可以了

层主正解,亲测有效,但是有个疑问是看过很多别人的代码,均没有做物理长度的处理,是何原因呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-5-20 13:50:29 | 显示全部楼层
bubeilaoren 发表于 2020-4-30 17:23
层主正解,亲测有效,但是有个疑问是看过很多别人的代码,均没有做物理长度的处理,是何原因呢?

最终结论,虽然可以通过设置数组物理长度的方式成功完成AcArray模板的释放,但是在有些场景无法提前预知数组长度(如炸开)。经高人指点,本人出现错误的本质原因是VS版本与ARX版本不兼容导致,更改VS编译器版本后,不需要提前设定物理长度也可完美实现数组的释放。

点评

谢谢,能具体说说,ARX是什么版本,然后之前用的VS是什么版本,后来改成了什么版本解决的?  详情 回复 发表于 2020-5-20 15:24

评分

参与人数 1D豆 +20 收起 理由
XDSoft + 20 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-5-20 15:24:50 | 显示全部楼层
bubeilaoren 发表于 2020-5-20 13:50
最终结论,虽然可以通过设置数组物理长度的方式成功完成AcArray模板的释放,但是在有些场景无法提前预知 ...

谢谢,能具体说说,ARX是什么版本,然后之前用的VS是什么版本,后来改成了什么版本解决的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-5-20 17:13:00 | 显示全部楼层
XDSoft 发表于 2020-5-20 15:24
谢谢,能具体说说,ARX是什么版本,然后之前用的VS是什么版本,后来改成了什么版本解决的?

刚开始用的VS2010开发arx2012,平台工具集用的V100, 除CAD加载arx程序时提示不兼容外,其他功能全部正常,也就没怎么理会。后来用到AcArray时出现奔溃...最终只需要把VS2010平台工具集改为V90即可,所有错误全部自动消失

评分

参与人数 1D豆 +5 收起 理由
marting + 5 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-21 23:41 , Processed in 0.382248 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表