在函数中传递继承的类数组会导致内存泄漏
Passing an inherited class array in function creates memory leak?
我有一个椭球体结构,它是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。希望你在什么地方做?
相关文章:
- 为什么调用堆栈数组会导致内存泄漏
- 为什么并行读取数组会导致内存泄漏?
- C++中的动态数组:Valgrind泄漏
- 模板化动态数组上的内存泄漏
- 温度参数数组的内存泄漏
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- 瓦尔格林德内存泄漏与动态数组C++
- 如何修复Valgrind报告的C 数组驱动器中的内存泄漏
- 返回指针(数组)(C++)时可能出现内存泄漏
- 带有指针的 2D 数组中的内存泄漏
- 内存泄漏 C++ 数组列表
- 从堆中删除c++数组和内存泄漏
- 由于动态数组而导致的哈希映射内存泄漏
- 如果我在C++中分配一个带有运算符 new[] 的对象数组,但单独释放它们是否仍然构成内存泄漏
- 在C++中,返回从本地字符数组创建的字符串是否会导致内存泄漏或未定义的行为
- Valgrind在定义字符*数组时报告内存泄漏
- char*数组内存泄漏
- 使用float 2d数组的C++内存泄漏,如果我使用double,则会消失
- 返回导致内存泄漏的wchar_t数组
- JNI 内存从字节数组泄漏