我正在设置一个原型c ++控制台应用程序。该程序包含一些虚拟类和指针等。当程序在主要功能中到达下面的代码行时,它将崩溃。我相信这与访问该指针处的内存有关。
主要()
...
Player _player(); //new player object created
Actor *player = &_player; //pointer to player created
...
//note player and get_inventory() are/return a pointer
{
Inventory* a = player->get_Inventory();
a->set_testMe("testedMe");
string result = a->get_testMe();
cout << result << endl;
}
{
Inventory* a = player->get_Inventory();
string result = a->get_testMe(); //This causes error
cout << result << endl;
}
...
Actor.cpp // get_Inventory()
...
Inventory* Actor::get_Inventory()
{
Inventory mInventory = this->actorInventory;
Inventory * pInventory = &mInventory;
return pInventory;
}
...
库存文件
...
Inventory::Inventory()
{
this->testMe = "initial test";
}
void Inventory::set_testMe(string input)
{
this->testMe = input;
}
string Inventory::get_testMe()
{
return this->testMe;
}
...
有任何想法吗?谢谢
这将返回一个指向局部变量的指针:
Inventory* Actor::get_Inventory()
{
Inventory mInventory = this->actorInventory;
Inventory * pInventory = &mInventory;
return pInventory;
}
第一条语句复制this->actorInventory
到局部变量(如方法局部get_Inventory
),然后返回指向该局部变量的指针。从中返回后get_Inventory()
,该变量将超出范围,不再存在。
您可能想要尝试this->actorInventory
直接返回指向的指针:
Inventory *Actor::get_Inventory()
{
return &actorInventory;
}
或者,如果您不希望调用者修改actorInventory
,请返回一个const
合格的指针:
const Inventory *Actor::get_Inventory() const
{
return &actorInventory;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句