找不到与动态内存相关的错误。 (最有可能)

时间:2017-07-11 18:16:18

标签: c++

我对编程比较陌生。我被赋予了创建游戏的任务,该游戏允许用户创建不同的足球运动员,将他们组合在一起并根据球员模拟球队之间的比赛。统计。为此,我决定在一个.txt文件中保存有关每个玩家的信息,并在单独的.txt文件中保存有关每个单独团队的信息。 我不会详细了解我的Player类,因为它似乎工作正常。这些是它的成员(在头文件中):

class Player {
string m_name;
int m_age;
string m_team;
string m_position;
double m_speed;

它的主要2个功能。我排除了主持人和吸气者:

void save ();
static vector<Player*> load();

&#34;保存&#34;将播放器的信息保存到.txt文件中,并且&#34;加载&#34;使用指向.txt文件的每个玩家的指针创建一个向量

现在我上课时遇到了麻烦 - 团队。

class Team{
string m_name;
vector<Player*> m_players;
bool m_type;
double m_coach;

功能选择玩家 - 它允许用户从Players.txt中所有玩家的列表中为他的团队选择玩家

void Team :: choosePlayers (){
    vector<Player*> temp = Player::load();
    vector<Player*> choice;
    vector<int> numbers;
    vector<string> strings;
    string userChoice;
    for (int i=0; i < temp.size(); i++){
            cout<<i+1<<". "<<temp[i]->getName()<<" "<<temp[i]->getAge()<<" "<<temp[i]->getPosition()<<" "<<temp[i]->getSpeed()<<endl;
        }
    cout<< "CHOOSE YOUR PLAYERS BY PRESSING THEIR CORRESPONDIG NUMBERS. SEPARATE DIFFERENT PLAYERS WITH SPACES."<<endl;
    getline (cin, userChoice);
    strings = splitString(userChoice);
    numbers = convertToInt(strings);
    for (int q=0; q < numbers.size(); q++){
            choice.push_back(temp[(numbers[q])-1]);
        }
    this->m_players = choice;
}

(splitToString和convertToInt只是我用来将用户的输入分开的函数 - 例如&#34; 1 5 7&#34;变成具有3个整数的矢量{1,5,7})

void save (){
    char* dir = new char[199];
    char* cstrName = new char[m_name.length()];
    strcpy(dir, "D:/C++ projects/Project project project/Team data/ "); //the directory of the save locations
    strcpy(cstrName, m_name.c_str());
    strcat (dir, cstrName);
    strcat (dir, ".txt");
    ofstream osF (dir);
    osF<<m_name<<endl;
    osF<<m_type<<endl;
    osF<<m_coach<<endl;
   for(int i=0; i < m_players.size(); i++){
        osF<<m_players[i]->getName()<<endl;
        osF<<m_players[i]->getAge()<<endl;
        osF<<m_players[i]->getTeam()<<endl;
        osF<<m_players[i]->getPosition()<<endl;
        osF<<m_players[i]->getSpeed()<<endl;
    }
    }

它将有关团队及其玩家的信息保存到一个与团队名称相同的.txt文件中。

最后是它的访问修饰符

void Team :: setName(){
    string temp;
    getline(cin, temp);
    this->m_name = temp;
    }
void Team :: setType(){
    bool temp = 0;
    cin>>temp;
    this->m_type = temp;
    }
void Team :: setCoach(){
    double temp = 0;
    cin>>temp;
    this->m_coach = temp;
    }

这就是问题所在。当我运行函数choosePlayers,任何访问修饰符或单独保存(类Team)时,它们都按预期工作。但是,当我尝试运行时,

Team obj1;
obj1.setName();
obj1.choosePlayers();
obj1.save;

我有时会遇到运行时错误c0000005(我已经读过动态内存覆盖或访问不存在的数组索引)或者selectPlayers似乎没有正确执行:它显示所有可用玩家的列表,但它不会让用户输入他的选择。程序只返回0,就像成功完成一样。

我现在几个小时都在查看我的代码,我似乎无法找到问题所在。如果有人看一眼并指出我正确的方向,我将不胜感激

0 个答案:

没有答案