游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3074|回复: 8

资源释放的问题,在退出的时候经常出错(不是所有的时候)

[复制链接]

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
发表于 2007-1-2 17:21:00 | 显示全部楼层 |阅读模式
(2D)最近写特效部分时候,采用了使用原来图片拷贝一份,然后使用各种算法处理,最终保存到特效的基类里面,保存的时候采用static std::vector<LPDIRECTDRAWSURFACE7> _surface;
可在程序退出的时候经常会出错,我也检查过了资源的释放,如下:
Effect::~Effect()
{
count--; //计数器 用来确定初始化的数量
if(count!=0) return;
for(int i=0;i<_surface.size();i++)
{
_surface->Release(); _surface = 0;
}
}
感觉是不应该出错的,可事实还是有问题.而且问题还就在这,因为不使用特效是不会出问题的.请大家帮忙看看.
下面的反汇编的语句,就是出错的地方,查了下大概意思是把后面的dword ptr [ecx]拷贝到ecx的寄存器里面去,不过ptr [ecx]就不懂是什么语法了,请知道的说下.多谢
mov         ecx,dword ptr [ecx]

8

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2007-1-2 20:46:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

不太懂,,可是你这一句 ----> if(count!=0) return;

逻辑应该是没有错误 不过我有点不明白 在析构函数内可以reture么?(至少c++标准有规定构造函数内不允许有返回值[void也不可以])

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
 楼主| 发表于 2007-1-3 11:07:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

return 那个应该是没有问题的,而且这里就是想表达个意思,不必太在意.
我开始写是if( count==0 ) ...
不过这个直接发贴时的编辑文字实在不好用,所以稍微变了下

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
 楼主| 发表于 2007-1-3 11:38:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

突然想起了一个可能的问题,就是LPDIRECTDRAW7指针可能先于LPDIRECTDRAWSURFACE7释放了,也就是释放的顺序乱了,也不知道是不是,偶试试去,希望成功

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-4 13:28:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

LZ给出的信息不足,至少没说明出的是什么错
大致看上去,猜测是重复释放同一个指针导致,建议改成
if (_surface != 0)
{
    _surface->Release(); _surface = 0;
}


我觉得LZ对于资源重用, 引用计数, 智能指针的理解并不完整
真正的解法应该是使用类似boost::shared_ptr这样带引用计数的智能指针来操作需要共享使用的资源

0

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-1-4 17:24:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

楼顶给出的代码,但不确定!

mov         ecx,dword ptr [ecx]   代表的操作是:
将ecx中的数据为起始地址的双字传送至ecx中。

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
 楼主| 发表于 2007-1-5 23:20:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

boost的库还从来没接触过,标准库的auto_ptr也不符合要求,所以我在用的时候就是其他的类不管理指针,而是只在基类的那个地方管理.

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
 楼主| 发表于 2007-1-5 23:20:00 | 显示全部楼层

Re: Re:资源释放的问题,在退出的时候经常出错(不是所有的

人品问题: Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

楼顶给出的代码,但不确定!

mov         ecx,dword ptr [ecx]   代表的操作是:
将ecx中的数据为起始地址的双字传送至ecx中。

多谢

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
 楼主| 发表于 2007-1-6 17:43:00 | 显示全部楼层

Re:资源释放的问题,在退出的时候经常出错(不是所有的时候)

问题已经解决,结果居然是第一次遇见的,将在新帖讨论
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 04:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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