2017-07-14 124 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值。但是,如果一個線程在另一個線程中執行與矢量相關的功能而另一個線程執行了與矢量相關的功能,則會發生衝突。

我不知道猜測是什麼,因爲我沒有你的源代碼。 但在我看來,這就是爲什麼發生錯誤的原因。

相關問題