繁体   English   中英

回到主函数c ++时,类中的值被破坏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM