分段错误 - 在创建新的数组实例时遇到问题?

时间:2018-02-22 01:36:53

标签: c++ arrays memory-management syntax

我正在开发一个项目,我需要将这个数组动态存储在内存中。但是我遇到了seg的问题。故障。我(尝试?)创建一个Player类数组的新实例。我的程序涉及遍历单词horse的数组。我知道我的算法正在运行(从之前的测试中)我只是在理解指针和实例/语法时遇到了麻烦。

所有这些都是在头文件中声明为

的字符数组
char HORSE[5];

到目前为止,这是我的代码,我只包含了为此项目修复的需求:

这是Player类的构造函数。

Player::Player(int n = 0){
    num = n ;
    index=-1;
    Player * HORSE[5];

    HORSE[0] = new Player('H');
    HORSE[1] = new Player('O');
    HORSE[2] = new Player('R');
    HORSE[3] = new Player('S');
    HORSE[4] = new Player('E');

}

这是我需要使用数组

的方法
char Player::add(){
if(index==5)
    return 0;
else {
   word[++index]=this->HORSE[index];
   return word[index];
}

}

1 个答案:

答案 0 :(得分:-1)

HORSE仅存在于构造函数中。一旦构造函数完成,它就会被丢弃。你需要成员变量。索引相同

class Player
{
 private:
    Player * horse_ [5];
    int index_;
    ....

}

注意我已将HORSE更改为horse_。通常,所有大写的东西都是常量。作为一个好习惯,你应该为你的成员变量命名约定。

现在你可以去

char Player::add(){
if(index_==5)
    return 0;
else {
   word[++index_]=this->horse_[index_];
   return word[index_];
 }
}
顺便说一句,在c ++中使用std :: vector而不是数组。他们更好

哦,是的 - 并取出你在其他地方的随机HORSE声明。你把它放在那里因为你的代码不会编译,否则它完全错误

正如其他人所指出的那样 - 这里还有很多其他问题,但这可以解决你的基本阻塞问题

例如

word[++index_]=this->horse_[index_];

应该是

++index_;
word[index_] = horse_[index_];

我的赌注是这个词也是错的,但是你没有表明它是如何定义的