在函数中传递继承的类数组会导致内存泄漏

Passing an inherited class array in function creates memory leak?

本文关键字:数组 泄漏 内存 函数 继承      更新时间:2023-10-16

我有一个椭球体结构,它是Object结构的派生。基本上,我想在Scene结构中创建一个Object[3][13]指针数组,在其中我可以指向不同的Object导数。

struct Ellipsoid : public Object {
      //...
}

在主要功能:

Ellipsoid ellipsoids[13];
addEllipsoids(3, ellipsoids); // this fills the array with valid ellipsoids, everything seems to be fine up until this point
// printing the contents here, everything is good
scene.addObjects(ellipsoids);

在这里打印出"椭球体"阵列后,一切看起来都很好。

在场景结构中:

struct Scene{
   int arr_num;
   Object* objects[3];
   void addObjects(Object* o){
        // printning the o[0], o[1], ... contents here, getting garbage..
        objects[arr_num++] =  o;
}

当我在这里打印出*o内容(从0..12开始)时,甚至在我将它们添加到对象数组之前,我就会得到令人讨厌的内存垃圾结果。

这是家庭作业,我不能使用std::vector之类的东西,只能使用非常基本的东西。我真的不知道这里出了什么问题。

问题是将派生类数组传递给基类指针。这不是继承。参考:

http://www.parashift.com/c++-faq/array-derived-vs-base.html

需要查看完整的代码,但这可以解决问题:

Object ellipsoids[13];

而不是void addObjects(Object*o);使用void addObjects(Object o[],int noOfArrayElements)noOfArrayBlements是必需的,因为您需要可以在addObject中处理的数组元素的数量。

场景结构只能存储3个对象。因此,你应该确保从外面你只得到3个物体,而且不超过3个。你在评论中传递了13个对象?或者,如果您想使其通用,请尝试使用malloc。

场景对象不会使arr_num初始化为0。希望你在什么地方做?