我想在我的游戏中创建一个商店和库存,但我的代码一直在崩溃。我的程序崩溃在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
}
非常感谢!
答案 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相关的函数,则会发生冲突。
我不知道投机者是什么,因为我没有您的源代码。 但在我看来,这就是发生错误的原因。