BunkerBuilder.exe 中 0x0070C75C 的第一次机会异常:0xC0000005:访问冲突写入位置 0xCCCCCC04
First-chance exception at 0x0070C75C in BunkerBuilder.exe: 0xC0000005: Access violation writing location 0xCCCCCC04
当我尝试在我的 loadDweller() 函数中将变量存储在 d.dwellerModel 中时出现此错误。我用“//错误”标记了这一行。这段代码之前没有抛出任何类似的错误,我也没有修改这段代码,这让我假设我已经对 class 定义的 headers/code 做了一些修改(我'也包括在下面)。提前感谢您提供的任何 advice/help!
抛出错误的函数:
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(es) 的部分:
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(es) 的部分:
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 dweller
和 class model
并且在 cpp 文件中定义了 ?
并且你已经定义了它们不同(至少dweller
:我在头文件版本中看到一个float movementSpeed;
但在cpp版本中没有) ?
我认为这有点危险(如果你允许我轻描淡写的话)。
建议:清除cpp文件中的dweller
和model
定义,并在其中包含头文件。
p.s.: 对不起我的英语不好
当我尝试在我的 loadDweller() 函数中将变量存储在 d.dwellerModel 中时出现此错误。我用“//错误”标记了这一行。这段代码之前没有抛出任何类似的错误,我也没有修改这段代码,这让我假设我已经对 class 定义的 headers/code 做了一些修改(我'也包括在下面)。提前感谢您提供的任何 advice/help!
抛出错误的函数:
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(es) 的部分:
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(es) 的部分:
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 dweller
和 class model
并且在 cpp 文件中定义了 ?
并且你已经定义了它们不同(至少dweller
:我在头文件版本中看到一个float movementSpeed;
但在cpp版本中没有) ?
我认为这有点危险(如果你允许我轻描淡写的话)。
建议:清除cpp文件中的dweller
和model
定义,并在其中包含头文件。
p.s.: 对不起我的英语不好