2014-11-05 32 views
-1

我有一個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和這樣的東西,只有非常基本的東西。我真的不知道這裏有什麼問題。

+0

可能重複[?可以將指針基點至派生對象的數組] (http://stackoverflow.com/questions/7196172/can-a-pointer-to-base-point-to-an-array-of-derived-objects) – user2079303 2014-11-05 13:14:17

+0

如果你從課程中學到了一件事,那麼我希望平淡無奇的數組是可怕的,當你被允許最終使用它們時,你會欣賞標準容器。 – user2079303 2014-11-05 13:23:28

+0

啊,是的,謝謝,我沒有發現這個問題,現在我明白了。 – Hadron 2014-11-05 14:14:23

回答

0

而不是void addObjects(Object * o);使用void addObjects(Object o [],int noOfArrayElements)noOfArrayElements是必需的,因爲您需要可以在addObject中處理的數組元素的數量。

你的場景結構只能存儲3個對象。所以你應該確保從外面你只能得到3個物體,而不是更多。在你的評論中你傳遞了13個對象?或者,如果你想使它通用的嘗試使用malloc。

您的場景對象不會將arr_num初始化爲0。希望你在某處做什麼?

+0

1.對不起,也許它措辭不好,但我的意思是我需要一個Object **指針**數組。 「對象」數組是包含這些指針的數組。傳遞的「橢圓體」數組大小恰好爲13,但它可能更大。 2.是的,arr_num在Scene的構造函數中初始化。 – Hadron 2014-11-05 13:00:52

1

問題是你正在傳遞派生類數組到基類指針。這不是繼承。參見:

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

需要看完整的代碼,但這個問題會得到解決:

Object ellipsoids[13];

+0

謝謝,現在我終於明白了爲什麼它不起作用。儘管這對我來說並不是解決方案(出於以下幾個原因),但我必須創建單獨的函數來將Ellipsoids,Paraboloids等添加到數組中。無論如何,感謝您的幫助。 – Hadron 2014-11-05 14:13:43