在函数中传递一个继承的类数组会造成内存泄漏吗?

时间:2014-11-05 12:34:24

标签: c++ arrays memory-leaks struct parameters

我有一个Ellipsoid结构,它是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等东西,只是非常基本的东西。我真的不知道这里有什么问题。

2 个答案:

答案 0 :(得分:1)

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

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

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

Object ellipsoids[13];

答案 1 :(得分:0)

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

您的场景结构只能存储3个对象。所以你应该确保从外面你只得到3个对象,而不是更多。在你的评论中你传递了13个对象?或者如果你想使它成为通用尝试使用malloc。

你的场景对象没有使arr_num初始化为0。希望你在某个地方做到这一点?