BunkerBuilder.exe中0x0070C75C处的首次机会异常:0xC0000005:写入位置0xCCCCC0

First-chance exception at 0x0070C75C in BunkerBuilder.exe: 0xC0000005: Access violation writing location 0xCCCCCC04

本文关键字:0xC0000005 异常 0xCCCCC0 位置 机会 exe 0x0070C75C BunkerBuilder      更新时间:2023-10-16

当我试图将变量存储在我的loadDwell()函数中的d.determodel中时,我收到了这个错误。我已经用"//错误"标记了这行。这段代码以前没有抛出过任何类似的错误,我也没有修改过这段代码,这让我认为我已经对类定义的头/代码进行了一些修改(我在下面也包括了这些)。提前感谢您提供的任何建议/帮助!

抛出错误的函数:

dweller loadDweller()
{
    dweller d;
    do
    {
        string temp = strIn;
        lineIn();
        temp = strIn;
        int lNum(currLine);
        if(checkOperator(strIn, "fName:"))          //first name
        {
            d.firstName = getRemainder(strIn, "fName:");
        }
        else if(checkOperator(strIn, "lName:"))         //Last name
        {
            d.lastName = getRemainder(strIn, "lName:");
        }
        else if(checkOperator(strIn, "pos["))           //Position
        {
            d.pos = loadCoord2();
        }
        else if(checkOperator(strIn, "jobType:"))       //Job type/job
        {
            d.jobType = getRemainder(strIn, "jobType");
        }
        else if(checkOperator(strIn, "jobPos:"))        //job position
        {
            d.machine = numInp(strIn, "jobPos:");
        }
        else if(checkOperator(strIn, "maxHealth:"))     //Maximum health
        {
            d.maxHealth = numInp(strIn, "maxHealth:");
        }
        else if(checkOperator(strIn, "currHealth:"))    //Current health
        {
            d.currHealth = numInp(strIn, "currHealth:");
        }
        else if(checkOperator(strIn, "strength:"))      //Strength
        {
            d.strength = numInp(strIn, "strength:");
        }
        else if(checkOperator(strIn, "stamina:"))       //Stamina
        {
            d.stamina = numInp(strIn, "stamina:");
        }
        else if(checkOperator(strIn, "agility:"))       //Agility
        {
            d.agility = numInp(strIn, "agility:");
        }
        else if(checkOperator(strIn, "intelligence:"))  //Intelligence
        {
            d.intelligence = numInp(strIn, "intelligence:");
        }
        else if(checkOperator(strIn, "modelRef:"))
        {
            model mod = masterList::getModelTemplate(numInp(strIn, "modelRef:"));      //Ensuring that the value can be returned [when debugging]
            d.dwellerModel = model();       //Error //Ensuring that the variable can be set [when debugging] by setting it equal to a constructor of itself
            d.dwellerModel = masterList::getModelTemplate(numInp(strIn, "modelRef:"));
        }
        else if(strIn == "model[")          //Model
        {
            d.dwellerModel = loadModel();
        }
        else if(checkOperator("Gender:"))   //Gender
        {
            d.setGender(getRemainder("Gender:"));
        }
        else if(strIn != "]")
        {
            _DEBUG_ERROR("Unknown operator!");
        }
        else if((strIn != "]") && file.eof())
        {
            _DEBUG_ERROR("Unexpected EOF");
            failed = true;
            //return d;
        }
    } while(!checkOperator("]") && !file.eof());
    strIn = "";
    return d;
}

.cpp文件中定义类的部分:

class dweller
{
public:
dweller();
//private:          //Make the following variables private once all direct access has been changed over to function access
string firstName;
string lastName;
bool isMale;            //true = NPC is male, false = NPC is female
var::coord2 pos;        //The NPC's position
//bool hasJob;          //If the NPC has a job
string jobType;         //What the NPC's job is
int machine;            //The vector ID of the machine the NPC is assigned to (in the map vector list)
bool isSelected;        //Whether or not this NPC is selected by the player
int maxHealth;          //The maximum health of the NPC
int currHealth;         //The current health of the NPC
int strength;
int stamina;
int agility;
int intelligence;
vector<item> inventory;
float maxInvVolume;         //The maximum volume that the inventory can hold (the sum of the volumes in the inventory must be less than this)
model dwellerModel;
float armLURot;                 //The current angle that the NPC's upper left arm is at
float armLLRot;                 //The current angle that the NPC's lower left arm is at
float armRURot;                 //The current angle that the NPC's upper right arm is at
float armRLRot;                 //The current angle that the NPC's lower right arm is at
var::coord2 toolPosOnHand;      //The coordinates that the tool should be centered at on the 'dominantHand' model_segment
model_segment* dominantHand;    //A pointer to the hand that single-handed items will be assigned to
model_segment* nonDominantHand; //A pointer to the hand that the secondary position of two-handed items will be assigned to
model_segment* itemLoc;         //A pointer to the model of the item that has been assigned to the dominant hand
bool holdingItem;
item heldItem;
public:
void draw();        
void update();
bool setInvVolMax(float _maxVol);
float getInvVolMax();
bool addToInventory(item _item);
bool removeFromInventory(int inventoryID);  //Removes the item at 'inventoryID' in the 'inventory' vector
bool equipItem(item _item);
bool equipItem(int inventoryID);    //Equips the item at 'inventoryID' in the 'inventory' vector
bool unequipItem();
void setGender(bool isMale);
void setGender(string gender);  //Male or Female
void executeTask(string _task);
void executeTask(string _task, var::coord2 _pos);
void executeTask(string _task, var::coord2 _pos, block _target);
void executeTask(string _task, var::coord2 _pos, item _target);
void executeTask(string _task, var::coord2 _pos, dweller _target);
void executeTaskEffect(string _effect);
};
class model
{
public:
    model();
    model_segment root;
    vector<anim_container> animations;
    bool runAnimations = true;
    void draw(var::coord2 position, float rotation);
    void update();
    void newAnimation();
    void newAnimation(anim_container anim);
    void updateAnimation();
    void updateAnimation(vector<anim_container> *animations);
    void initializeAnimation();
    void initializeAnimation(vector<anim_container> *animations);
    void debugTree();               //Prints a tree diagram of the model
};
model::model()
{
    //app::console();
}
model getModelTemplate(int ID) //Returns the template model from the master list at "ID".  Defaults to an empty model class if the supplied ID is not defined.
    {
        if(ID < models.size())
        {
            return models[ID];
        }
        else
        {
            _DEBUG_ERROR("The requested template does not exist");
            return model();
        }
    }

.h文件中定义类的部分:

class dweller
{
public:
    dweller();
    //private:          //Make the following variables private once all direct access has been changed over to function access
    string firstName;
    string lastName;
    bool isMale;            //true = NPC is male, false = NPC is female
    float movementSpeed;
    var::coord2 pos;        //The NPC's position
    //bool hasJob;          //If the NPC has a job
    string jobType;         //What the NPC's job is
    int machine;            //The vector ID of the machine the NPC is assigned to (in the map vector list)
    bool isSelected;        //Whether or not this NPC is selected by the player
    int maxHealth;          //The maximum health of the NPC
    int currHealth;         //The current health of the NPC
    int strength;
    int stamina;
    int agility;
    int intelligence;
    vector<item> inventory;
    float maxInvVolume;         //The maximum volume that the inventory can hold (the sum of the volumes in the inventory must be less than this)
    model dwellerModel;
    float armLURot;                 //The current angle that the NPC's upper left arm is at
    float armLLRot;                 //The current angle that the NPC's lower left arm is at
    float armRURot;                 //The current angle that the NPC's upper right arm is at
    float armRLRot;                 //The current angle that the NPC's lower right arm is at
    var::coord2 toolPosOnHand;      //The coordinates that the tool should be centered at on the 'dominantHand' model_segment
    model_segment* dominantHand;    //A pointer to the hand that single-handed items will be assigned to
    model_segment* nonDominantHand; //A pointer to the hand that the secondary position of two-handed items will be assigned to
    model_segment* itemLoc;         //A pointer to the model of the item that has been assigned to the dominant hand
    bool holdingItem;
    item heldItem;
public:
    void draw();
    void update();
    bool setInvVolMax(float _maxVol);
    float getInvVolMax();
    bool addToInventory(item _item);
    bool removeFromInventory(int inventoryID);  //Removes the item at 'inventoryID' in the 'inventory' vector
    bool equipItem(item _item);
    bool equipItem(int inventoryID);    //Equips the item at 'inventoryID' in the 'inventory' vector
    bool unequipItem();
    void setGender(bool isMale);
    void setGender(string gender);  //Male or Female
    void executeTask(string _task, var::coord2 _pos);
    void executeTask(string _task, var::coord2 _pos, block _target);
    void executeTask(string _task, var::coord2 _pos, item _target);
    //void executeTask(string _task, var::coord2 _pos, 
    void executeTaskEffect(string _effect);
};
class model
{
public:
    model();
    model_segment root;
    vector<anim_container> animations;
    bool runAnimations = true;
    void draw(var::coord2 position, float rotation);
    void update();
    void newAnimation();
    void newAnimation(anim_container anim);
    void updateAnimation();
    void updateAnimation(vector<anim_container> *animations);
    void initializeAnimation();
    void initializeAnimation(vector<anim_container> *animations);
    void debugTree();
};

您在头文件中定义了class dwellerclass modeland在cpp文件中?

您已经定义了它们不同(至少dweller:I在头文件版本中看到float movementSpeed;,但在cpp版本中没有)?

我认为这有点危险(如果你允许我轻描淡写的话)。

建议:清除cpp文件中的dwellermodel定义,并在其中包含头文件。

抱歉我英语不好。

相关文章: