C++指针运行时错误 - 使用指针设置变量然后检索

C++ pointers runtime error - setting a variable with pointers then retrieving

本文关键字:指针 变量 然后 检索 设置 运行时错误 C++      更新时间:2023-10-16

我正在设置一个原型 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;
}
...

演员.cpp//get_Inventory()

...
Inventory* Actor::get_Inventory()
{
    Inventory mInventory = this->actorInventory;
    Inventory * pInventory = &mInventory;
    return pInventory;
}
...

库存.cpp

...
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;
}