C++ пул объектов: происходит сбой программы при использовании 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);
}
Я знаю, что происходит сбой в этой строке, потому что, если я рекомендую это, он не падает
2 ответа
Решение
Это не будет работать:
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);
}