我无法弄清楚为什么我的矢量无法推回

时间:2017-07-14 14:32:39

标签: c++ visual-c++ vector inventory

我想在我的游戏中创建一个商店和库存,但我的代码一直在崩溃。我的程序崩溃在addToInventory-> addInventoryItems(name);我不确定为什么。

// inventory.h
struct InventoryItems
{
    string type;
};
vector<InventoryItems*> inventoryItems;

// inventory.cpp
void Inventory::addInventoryItems(string itemName)
{
    addItem->type = itemName;
    inventoryItems.push_back(addItem);
}


// shop.h
Inventory* addToInventory;

// shop.cpp
void Shop::purchase()
{
    string name = touchableSprites[i]->getSprite()->getName(); 
    addToInventory->addInventoryItems(name);  //crashes here
}

非常感谢!

2 个答案:

答案 0 :(得分:-1)

我猜addItem中的问题,因为你没有设置类型

void Inventory::addInventoryItems(string itemName)
{
    InventoryItems addItem;
    addItem->type = itemName;
    inventoryItems.push_back(addItem);
}

答案 1 :(得分:-1)

这种错误通常在同时执行功能时发生。

例如:)

#define SET_DEFAULT_DELAY {Sleep(100)}

InventoryItems* addToInventory;
TCHAR g_tszParam[MAX_PATH];

DWORD WINAPI _VECTOR_OPERATION_01(LPVOID lParam)
{
    while(TRUE)
    {
        if(0 == _tcsicmp(g_tszParam, _T("Default_Value"))
        {
            addToInventory->addInventoryItems(g_tszparam);
        }
        SET_DEFAULT_DELAY;

    }
}

DWORD WINAPI _VECTOR_OPERATION_02(LPVOID lParam)
{
    while(TRUE)
    {
        if(0 == _tcsicmp(g_tszParam, _T("Special_Value"))
        {
            addToInventory->addInventoryItems(g_tszparam);
        }
        SET_DEFAULT_DELAY;
    }
}

int _tmain()
{
    ...
    HANDLE hThread[2];
    hThread[0] = CreateThread(NULL, 0, _VECTOR_OPERATION_01, NULL, 0, 0);
    if(INVALID_HANDLE_VALUE != hThread[0])
    {
        CloseHandle(hThread[0]);
    }
    hThread[1] = CreateThread(NULL, 0, _VECTOR_OPERATION_02, NULL, 0, 0);
    if(INVALID_HANDLE_VALUE != hThread[1])
    {
        CloseHandle(hThread[1]);
    }
    ...
    return 1;
}

在这种情况下,线程执行的结果取决于g_tszParam值。但是,如果一个线程执行与Vector相关的函数而另一个线程在另一个线程中执行与Vector相关的函数,则会发生冲突。

我不知道投机者是什么,因为我没有您的源代码。 但在我看来,这就是发生错误的原因。