C++对象池:使用 malloc 时程序崩溃
C++ object pool: program crashes when using malloc
我正在尝试制作一个简单的对象池,但我无法让它工作。使用 malloc 为模板类型的动态数组分配空间时,我的代码崩溃
我的代码:
template <class cl>
class ObjectPool{
public:
gltAtlasRenderer* br;
cl* items;
int SIZE,texid;
void Innit(int size,int texidi)
{
SIZE=size;
items=(cl*)malloc(sizeof(cl)*SIZE);->>>>>>>>>>HERE MY APP CRASHES
/*br=new gltAtlasRenderer(SIZE,false,1);
texid=texidi;
for(int c=0;c<SIZE;c++)items[c].alive=false;
*/
}
void Update(Arena* arena)
{
for(int c=0;c<SIZE;c++)
{
if(!items[c].alive)continue;
items[c].Update(arena);
}
}
void Render()
{
br->RenderStart();
for(int c=0;c<SIZE;c++)
{
if(!items[c].alive)continue;
items[c].Render(br);
}
br->RenderStop(texid);
}
};
我在网络上找到的所有示例都使用固定数组和向量,但我需要在运行时分配数组。
编辑:这是我创建它的方式:
ObjectPool<Enemie1>* enemies1;
void Innit()
{
enemies1->Innit(size,texid);
}
我知道那条线正在崩溃,因为如果我赞扬它,它不会崩溃
这不起作用:
ObjectPool<Enemie1>* enemies1;
void Innit()
{
enemies1->Innit(size,texid);
}
您需要在使用之前分配内存,如下所示:
ObjectPool<Enemie1>* enemies1;
void Innit()
{
enemies1 = new ObjectPool<Enemie1>;
enemies1->Innit(size,texid);
}
ObjectPool<Enemie1>* enemies1; //This is uninitialized
void Innit()
{
enemies1->Innit(size,texid); //This calls a method on an uninitialized pointer
}
在 Innit 方法中,当您将 malloc 的结果分配给您通过无效指针分配的成员之一时,这会导致崩溃。
将其更改为此。
ObjectPool<Enemie1> enemies1;
void Innit()
{
enemies1.Innit(size,texid);
}
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃