2017-07-14 163 views
-2

我想在游戏中制作一个商店和一个库存,但是我的代码不断崩溃。我的程序崩溃在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

你在哪里分配'addToInventory'? – NathanOliver

+1

分配了“addToInventory”在哪里?我看到的只是一个声明的指针,它在哪里分配为'new'ed?因为它有一个单位化的指针,并且访问这个结果会导致未定义的行为或访问冲突 – EdChum

+1

请提供一个[mcve]代码中有许多未知数,最显着的是'addItem' – user463035818

回答

-1

我猜的addItem问题,因为您没有设置时同时执行功能的执行类型

void Inventory::addInventoryItems(string itemName) 
{ 
    InventoryItems addItem; 
    addItem->type = itemName; 
    inventoryItems.push_back(addItem); 
} 
-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值。但是,如果一个线程在另一个线程中执行与矢量相关的功能而另一个线程执行了与矢量相关的功能,则会发生冲突。

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

相关问题