[英]values in class destroyed when getting back to main function c++
我在C ++代码中遇到问题。 我有一个正在使用的DataStructure类,尤其是其方法GetAllCreaturesByLevel定义如下:
Class DataStructure;
StatusType DataStructure::GetAllCreaturesByLevel(int magiID, int **creatures, int *numOfCreatures);
此方法从主函数接收指针,并返回有关其正在处理的对象的一些统计信息。
要从主函数使用此方法,我调用了一个函数,该函数将传递主函数的指针,将对象从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);
}
此功能中的代码可以完美运行。 问题是回到主界面时:指针会返回正确的值,但是对象中的所有数据都会更改并变成垃圾值。
造成此错误的原因是什么?
在我使用的方法中:
int *creaturesArray = new int[*numOfCreatures];
并在生物数组中输入值:
for(int i = 0; i < *numOfCreatures; i++) {
creatures[i] = &creaturesArray[i];
}
问题出在组装中。 从GetAllCreaturesByLevel返回主目录时,堆栈比进入函数时要大,因此DS与以前的堆栈不在同一位置。 结果,DS中输入的值不是它的真实值,而是生物数组中的地址之一。
解决方案是:
int *creatures = new int[*numOfCreatures];
并按原样返回生物,而无需在途中使用其他数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.