Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;对象池:使用malloc时程序崩溃_C++_Templates_Malloc_Dynamic Arrays_Objectpool - Fatal编程技术网

C++ C++;对象池:使用malloc时程序崩溃

C++ C++;对象池:使用malloc时程序崩溃,c++,templates,malloc,dynamic-arrays,objectpool,C++,Templates,Malloc,Dynamic Arrays,Objectpool,我正在尝试创建一个简单的对象池,但我无法让它工作。 我的代码在使用malloc为模板类型的动态数组分配空间时崩溃 我的代码: template <class cl> class ObjectPool{ public: gltAtlasRenderer* br; cl* items; int SIZE,texid; void Innit(int size,int texidi) { SIZE=size; item

我正在尝试创建一个简单的对象池,但我无法让它工作。 我的代码在使用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);
    }
};
模板
类对象池{
公众:
gltatlas*br;
cl*项目;
int大小,texid;
无效Innit(整数大小,整数texidi)
{
大小=大小;
items=(cl*)malloc(sizeof(cl)*SIZE);->>>>>>>>>>>>>>>我的应用程序崩溃了
/*br=新的gltAtlasRenderer(大小,false,1);
texid=texidi;
用于(int c=0;cInnit(大小,texid);
}
我知道这条线正在崩溃,因为如果我推荐它,它不会崩溃

这是行不通的:

ObjectPool<Enemie1>* enemies1;
void Innit()
{
         enemies1->Innit(size,texid);
}
ObjectPool*enemies1;
无效因尼特()
{
enemies1->Innit(尺寸,texid);
}
您需要在使用之前分配内存,如下所示:

ObjectPool<Enemie1>* enemies1;
void Innit()
{
         enemies1 = new ObjectPool<Enemie1>;
         enemies1->Innit(size,texid);
}
ObjectPool*enemies1;
无效因尼特()
{
enemies1=新对象池;
enemies1->Innit(尺寸,texid);
}
这不起作用:

ObjectPool<Enemie1>* enemies1;
void Innit()
{
         enemies1->Innit(size,texid);
}
ObjectPool*enemies1;
无效因尼特()
{
enemies1->Innit(尺寸,texid);
}
您需要在使用之前分配内存,如下所示:

ObjectPool<Enemie1>* enemies1;
void Innit()
{
         enemies1 = new ObjectPool<Enemie1>;
         enemies1->Innit(size,texid);
}
ObjectPool*enemies1;
无效因尼特()
{
enemies1=新对象池;
enemies1->Innit(尺寸,texid);
}
ObjectPool*enemies1;//这是未初始化的
无效因尼特()
{
enemies1->Innit(大小,texid);//这将调用未初始化指针上的方法
}
在Innit方法中,当通过无效指针将malloc的结果分配给正在分配的成员之一时,会导致崩溃

换成这个

ObjectPool<Enemie1> enemies1;
void Innit()
{
     enemies1.Innit(size,texid);
}
ObjectPool-enemies1;
无效因尼特()
{
enemies1.Innit(尺寸,texid);
}
ObjectPool*enemies1;//这是未初始化的
无效因尼特()
{
enemies1->Innit(大小,texid);//这将调用未初始化指针上的方法
}
在Innit方法中,当通过无效指针将malloc的结果分配给正在分配的成员之一时,会导致崩溃

换成这个

ObjectPool<Enemie1> enemies1;
void Innit()
{
     enemies1.Innit(size,texid);
}
ObjectPool-enemies1;
无效因尼特()
{
enemies1.Innit(尺寸,texid);
}

malloc()
不会调用
类的构造函数:使用
new[]
。向量是在运行时分配的。只需使用
std::vector
将对象实例存储在中;它是在运行时分配的,可以随意调整大小(因此,如果需要,可以添加/删除实例)。如果你避免手动内存管理和指针操作,生活会轻松得多。@SteveL:1)请参阅hmjd的评论。2)标识符拼写错误是错误。Innit、texidi、Enemie1都指出了您在掌握英语方面存在的一些问题,这些问题在您遇到问题时可能是有害的,但应该加以解决,因为它们以后会制造麻烦。@ahenderson,这是一个C--程序。
malloc()
不会调用
类的构造函数:使用
new[]
。向量是在运行时分配的。只需使用
std::vector
将对象实例存储在中;它是在运行时分配的,可以随意调整大小(因此,您可以在必要时添加/删除实例)。如果你避免手动内存管理和指针操作,那么你的生活就会轻松得多。@SteveL:1)参见hmjd的评论。2)标识符拼写错误是错误。Innit、texidi、Enemei1都指出了你掌握英语的一些问题,这些问题可能会对你的问题造成伤害,但是应该解决,因为他们以后会制造麻烦。@ahenderson,这是一个C--程序。谢谢你,这解决了问题。我忘记了,因为我将池创建为指针,所以我也需要手动分配它:)谢谢,这解决了问题。我忘了,因为我将池创建为指针,所以我也需要手动分配它:)