- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个子弹类。我尝试通过以下代码实例化它:
我总是得到一个断言,有一个正在使用的内存..为什么?
在另一个叫做 ship 的类中:
if (g_Input.isKeyDown(s3eKeySpace))// && Canfire)
{
Bullet *bullet = new Bullet();
bullet->Init(SHIP_BULLET);
bullet->setPosition(Position.x, Position.y - 20);
Bullets->push_back(bullet);
Canfire = false;
}
这被称为导致内存仍在使用的每一帧:
for (list<Bullet*>::iterator it = Bullets->begin(); it != Bullets->end();)
{
(*it)->Update(dt);
if ((*it)->IsDestroyed)
{
Canfire = true;
it = Bullets->erase(it);
}
else
{
it++;
Canfire = false;
}
}
Ship 类的析构函数
Ship::~Ship()
{
for (std::list<Bullet*>::iterator it = Bullets->begin(); it != Bullets->end(); ++it)
delete *it;
delete Bullets;
}
class Bullet
{
public:
Bullet();
~Bullet();
public:
void Init(BulletTypes bulletType);
void Update(float dt);
void Render();
CIw2DImage* Image; // curr image
}
void Bullet::Init(BulletTypes bulletType)
{
BulletType = bulletType;
if (BulletType == SHIP_BULLET)
{
Image = Iw2DCreateImage("textures/ship_bullet.png");
if (Image == nullptr)
return;
}
}
Bullet::~Bullet()
{
delete Image;
}
最佳答案
执行此代码会导致泄漏:
for (list<Bullet*>::iterator it = Bullets->begin(); it != Bullets->end();)
{
(*it)->Update(dt);
if ((*it)->IsDestroyed)
{
Canfire = true;
it = Bullets->erase(it);
}
else
{
it++;
Canfire = false;
}
}
基本上,您从容器中删除了一个动态分配的元素,失去了对它的任何引用,因此您无法再释放它的内存。显然,调用 Ship 析构函数只会释放当前在列表中的元素,不包括在迭代中删除的元素。
我建议将此作为修复:
for (list<Bullet*>::iterator it = Bullets->begin(); it != Bullets->end();)
{
(*it)->Update(dt);
if ((*it)->IsDestroyed)
{
Canfire = true;
delete *it; // it now points to invalid address
it = Bullets->erase(it);
}
else
{
it++;
Canfire = false;
}
}
另一种选择是将所有移除的子弹存储在 Ship 类的其他容器中,以防 Bullet 在销毁后可以被引用。这个想法的问题是,你有很多被摧毁的子弹占用内存,并且必须想出一个解决方案,一旦它们真的被证明无用,如何将它们移除。
如果您坚持这样做,使用 std::shared_ptrs 而不是列表中的原始指针可以解决您的问题(稍微降低性能)。
关于c++ - 使用 marmalade SDK 的内存使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669253/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在使用 Iw2D 完成的游戏中,我想使用 IwGx 模块支持的 TTF 字体。我读到 IwGxFont 模块与 Iw2D 一起使用是可行的,但我一定遗漏了一些东西文字没有出现。它编译并运行,只是没有文
Marmalade SDK 是一种跨编译器、跨平台框架,允许用户从 Windows 开发 Iphone 应用程序。 Marmalade 有一个交叉编译器,能够直接从本地 Windows 计算机生成有效
我是果酱 SDK 的新手。我有一个 iOS 功能的自定义库,我想将该库与 marmalade SDK 集成,有没有办法在默认的 marmalade SDK 中添加自定义库?我应该将我的 objecti
我对移动应用程序开发完全陌生,一直在寻找一个合适的平台作为起点。我遇到了一个项目,人们希望将一家开关和家庭自动化公司的自助广告实现到移动应用程序中。他们最初想要一个 iPhone 应用程序,但随后也想
我有兴趣开发移动应用程序,最有可能用于 Android。问题是,我对 C++ 有相当多的经验,但对 Java 或 Objective-C 却一无所知。我正在研究使用 Marmalade SDK 来帮助
我是 Marmalade 的新手游开发者。所以我想获得屏幕 height 和 width 以获取不同屏幕尺寸的分辨率。 Iw2DGetSurfaceWidth() 和 IwGxGetScreenWid
标题很明显:我正在尝试使用 loadfile.cpp 和 loadfile.h 在 main.cpp 之外运行一个进程来处理加载和显示图像。但是,当我这样做时,Marmalade 不断抛出构建错误。
我是 marmalade sdk 的新手,我正在关注 this tutorial , 我读了这一段 *这里我们告诉 Iw2D 设置“当前”变换以在绘制“任何东西”时使用。请记住,Iw2D 是基于上下文
我有一个子弹类。我尝试通过以下代码实例化它: 我总是得到一个断言,有一个正在使用的内存..为什么? 在另一个叫做 ship 的类中: if (g_Input.isKeyDown(s3eKeySp
我正在查看 Marmalade's implementation of CSharedPtr ,它声称执行引用计数。文档指出: When the last CSharedPtr<> referring
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
有没有人知道教程,或者三个简单的步骤来编译我用 Cocos2d-x 和 Marmalade 编写的代码? 我想把我已经在 Cocos2d-X 中编译和使用的代码插入到果酱项目中,然后编译。在很多地方写
我正在尝试为果酱框架编写 GPUImage 扩展。为此,我使用了官方文档和扩展开发套件 (EDK) Marmalade。我编写了一些示例代码,编译为: mkb s3egpuimage_iphone.m
Marmalade 可用于在 C++ 中制作 Roku 应用程序。从他们的网站上看,他们似乎鼓励在 Roku 中进行游戏开发。如果我想在 Roku 中制作带有一些图形的普通电视 channel 应用,
有传言称,Apple 拒绝针对低于 6.0 的 iOS SDK 编译的应用程序。我想知道这与 Marmalade 应用程序有什么关系?我已经安装了 Xcode 4.5 并将 xcode-select
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我的 Wireshark 日志中有来自 marmalade-repo.org 的 129 个数据包,其中许多列出了 Marmalade 包条目。我没有使用代理,HTTP_PROXY 未设置。 ELPA
我有一个 MySQL 数据库设置为通过 python 接受名称,如下所示: class PushNames(tornado.web.RequestHandler): def post(self):
我需要打开 iphone 文件夹,如照片/视频。 我需要向用户显示该文件夹的内容,当用户从中选择一个文件时,我需要将该特定文件从该文件夹复制到我的应用程序文件夹。 让我知道为此需要使用哪些 API。
我是一名优秀的程序员,十分优秀!