我正在写一个刽子手游戏。我收到此错误:Microsoft C ++异常:std :: bad_alloc在内存位置0x0017F5E0。当我单步执行程序时它停在这里,输出窗口给出了这个错误:Microsoft C ++异常:std :: bad_alloc在内存位置0x0017F5E0,我看到消息“读取字符串字符时出错。
这是我的代码
void Player::boardSetup()
{
unsigned seed =time(0);
srand(seed);
word=rand()%100;
Words1[word]=Word1;
strcpy_s(Copy,Word1.c_str());
size=strlen(Word1.c_str());
for(index=0;index<size;index++)
{
Guess[index]='-';
cout<<Guess[index]<<endl;
}
}
这是我的所有代码。我希望这有帮助,所以你不必猜测。 班级球员
{ public:
string fName;
string lName;
int DOB;
string username;
int SS4;
string email;
int won;
int lost;
const int static WordSIZE=15;
int const static totalWORDS=100;
string static Letters[WordSIZE];
string static Words1[totalWORDS];
char static Copy[WordSIZE];
char static Guess[WordSIZE];
int index;
int word;
int size;
int isComing;//I need function to initialize these.
char letter;
bool correct;//I need a function to initialize these.
string Word1;
public:
Player(string,string,int,string,int,string);
void getWords();
void boardSetup();
void playGame();
void deathBed(int);
};
Player::Player(string first,string last,int birth, string nicname,int SS,string mail)
{
fName=first;
lName=last;
DOB=birth;
username=nicname;
SS4=SS;
email=mail;
isComing=0;
correct=true;
}
const int static WordSIZE=15;
int const static totalWORDS=100;
string Player:: Words1[totalWORDS];
char Player:: Copy[WordSIZE];
char Player:: Guess[WordSIZE];
string Player:: Letters[WordSIZE];
void Player::getWords()
{
ifstream WordBank;
int index=0;
WordBank.open("C:\\WordBank\\words.txt");
if(WordBank)
{
while(WordBank>>Words1[index])
{
index++;
}
WordBank.close();
}
else
{
cout<<"There was an error."<<endl;
}
}
/*string *words2;
words2=new string[100];
ifstream WordBank;
int index;
WordBank.open("C:\\WordBank\\words.txt");
if(WordBank)
{
for(index=0;(WordBank>>words2[index]);index++)
{
}
WordBank.close();
}
else
{
cout<<"There was an error."<<endl;
}
delete [] words2;
words2=0;
}*/
void Player::boardSetup()
{
unsigned seed =time(0);
srand(seed);
word=rand()%100;
Words1[word]=Word1;
strcpy_s(Copy,Word1.c_str());
size=strlen(Word1.c_str());
for(index=0;index<size;index++)
{
Guess[index]='-';
cout<<Guess[index]<<endl;
}
}
}
void Player::playGame()
{
while(isComing!=7)
{
deathBed(isComing);
cout<<Guess<<endl;
cout<< "Please guess a letter."<<endl;// or press 0 to go to the main screen for help
cin>>letter;
letter=toupper(letter);
for (index=0;index<size;index++)
{
if(Copy[index]==letter)
{
cout<<"Nice Job"<<endl; //add the ability to see the word
Guess[index]=letter;
cout<<Guess[index]<<endl;
}
else if(strcmp(Word1.c_str(),Guess)==0)
{
cout<<"You WIN!!!"<<endl;
return;
}
else if (correct=false)
{
cout<<"Please,Try again"<<endl;
isComing++;
}
}
}
void deathBed(int isComing);
cout<<"The word is"<<Words1[word]<<"."<<endl;
//draw a big red noose. call a function for it.
}
struct userInfo
{
string FName;
string LName;
int dob;
string Username;
int ss4;
string Email;
};
userInfo getUserInfo();
int main()
{
userInfo i;
i=getUserInfo();
Player player1(i.FName,i.LName,i.dob,i.Username,i.ss4,i.Email);
player1.getWords();
player1.boardSetup();
player1.playGame();
return 0;
}
userInfo getUserInfo()
{
userInfo info;
cout<<"What is your first name?"<<endl;
cin>> info.FName;
cout<<"What is your last name?"<<endl;
cin>>info.LName;
cout<<"What is your date of birth"<<endl;
cin>>info.dob;
cout<<"Please enter a user name."<<endl;
cin>>info.Username;
cout<<"Please enter the last four digits of your Social Security number."<<endl;
cin>>info.ss4;
cout<<"Please enter your email address."<<endl;
cin>>info.Email;
return info;
}
答案 0 :(得分:2)
我不会调试你的程序,但是我发现了一些问题:
使用std::vector
不是数组。
阵列不知道它们的大小,它们无法按需扩展并且在四处传播时会变得混乱。
使用您的结构。
您只创建userInfo
结构以填充输入
您的Player
类与userInfo
具有相同的字段。您应该在userInfo
中创建Player
变量
将整个userInfo
结构传递给Player
构造函数
您可以使用初始化列表将userInfo
从构造函数参数复制到userInfo
中的Player
变量。
分离您的概念。
在您目前的设计中,每个Player
都会嵌入电路板
在main()
中,至少有一名玩家必须得到董事会的话
我建议做一个Board
课程。每个Player
都可以对Board
进行猜测,并且可以返回响应并自行重绘
Board
将负责初始化其单词列表并选择猜测。
将主题分隔为单独的翻译单元。
将播放器放入自己的标头和源文件中
main
函数应位于单独的源文件中
这样您就可以在main
中进行更改,而无需重新编译Player
该概念还有助于支持松散耦合,封装和数据隐藏。
让对象完成工作。
userInfo
类应该有一种从外界获取其成员信息的方法
Board
班级应该执行与董事会相关的工作
Player
课程应该执行与玩家相关的工作
main
函数应该将所有内容粘合在一起(例如协调玩家)。