gpt4 book ai didi

c++ - 使用 std::vector 时发生访问冲突

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:13 29 4
gpt4 key购买 nike

我收到以下错误:

  • TBG.exe 中 0x012a4bd9 处的未处理异常:0xC0000005:访问冲突读取位置 0x0000002c。

指向vector.h的size()方法。使用这种方法时似乎会发生:

void Player::printInventory(){
if(inventory.size() != 0){
for(unsigned int i=0; i<inventory.size(); i++){
cout<<inventory[i] << endl;
}
}
}

完整代码:

播放器.h:

#pragma once
#include <vector>
#include <memory>

using namespace std;

class Player
{
private:
int health;
string name;
vector<int> inventory;

public:
Player(void);
Player(string);
~Player(void);
void changeHealth(int);
void addToInventory(int);
void removeFromInventory(int);
void printInventory();
};

播放器.cpp:

#include "Player.h"
#include <iostream>
#include <string.h>

Player::Player(void)
{
health = 20;
}

Player::Player(string newName)
{
name = newName;
health = 20;
}

Player::~Player(void)
{
}

void Player::changeHealth(int amount){
health += amount;
}

/*void Player::addToInventory(int item){
inventory.push_back(item);
}

void Player::removeFromInventory(int itemID){

for(unsigned int i=0; i<inventory.size(); i++){
if(inventory[i] == itemID)
inventory.erase(inventory.begin()+i);
}

}*/

void Player::printInventory(){
if(!inventory.empty()){
for(unsigned int i=0; i<inventory.size(); i++){
cout<<inventory[i] << endl;
}
}
}

主要内容:

#include "World.h"
#include "Player.h"
#include <iostream>
#include <memory>

World world;

void main(){

unique_ptr<Player> player(new Player("Ted"));
world.setPlayer(move(player));
int selection = 0, inventoryOption = 0, exitOption = 0;

do{
inventoryOption = 0;
exitOption = inventoryOption + 1;

cout<< inventoryOption <<". View Inventory"<<endl;
cout<< exitOption <<". Quit game";

cin>>selection;

if(selection == inventoryOption){
player->printInventory();
}
else{
}


}while(selection != exitOption);

}

请原谅困惑,此代码是从具有相同错误的先前代码中删除的。

最佳答案

您正在移动unique_ptr,使其不再指向新播放器,然后您正在使用它:

world.setPlayer(move(player));

...

player->printInventory();

不要仅仅为了编译代码而使用move;使用 shared_ptr 这样您就可以拥有多个指向该对象的指针。

关于c++ - 使用 std::vector 时发生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com