0
我在C++中的代碼中遇到問題。 我有我使用和,特別是,其方法GetAllCreaturesByLevel定義如下一類數據結構:類中的值在返回主函數時被破壞C++
Class DataStructure;
StatusType DataStructure::GetAllCreaturesByLevel(int magiID, int **creatures, int *numOfCreatures);
這種方法從main函數接收指針和還給一些統計一下正在工作的對象。
要從主函數使用此方法,我調用一個函數,它將傳遞來自主函數的指針,將對象從void *轉換爲DataStructure *並調用其方法GetAllCreaturesByLevel。此功能定義如下:
StatusType GetAllCreaturesByLevel(void *DS, int magiID, int **creatures, int *numOfCreatures){
if((DS == NULL)||(creatures == NULL)||(magiID == 0)||(numOfCreatures == NULL)){
return INVALID_INPUT;
}
return ((DataStructure*)DS)->GetAllCreaturesByLevel(magiID, creatures, numOfCreatures);
}
該代碼在此函數中完美工作。問題是什麼時候回到main:指針返回正確的值,但對象中的所有數據都被改變並轉換爲垃圾值。
這個錯誤的原因是什麼?
哪個對象被破壞?一個'DatStructure'類型或'StatusType'類型之一? – RomCoo
被銷燬的對象是DataStructure * one(作爲void *傳遞)。 StatusType只是一個枚舉,它提供了有關函數的最後一個問題(成功,失敗,allocation_error)的一些信息。奇怪的是Destructor似乎並沒有被使用。 – Yaklefak
爲什麼在C++中使用void指針和**數組?如果你真的用C語言編程,你需要**傳遞值,或者尊重那些你想改變的值。就目前而言,這個函數試圖將主值範圍內的值改變,原始垃圾值仍然存在,因爲它們永遠不會改變。 – NonCreature0714