我有两个类,一个叫Handler
,一个叫Dice
。在我的Handler
类中,我有一个名为Dice **dices
的私有变量和一个名为rollDices
的公共函数。在我的Dice
课程中,我有一个名为toss的函数,它将随机化数字1-6。问题是,当函数rollDices
调用函数折腾时,我在EXT_BAD_ACCESS
函数中得到toss
。有谁知道为什么,并有解决方案吗?
My Handler.cpp:
void Handler::rollDices(){
Dice **allDices = new Dice*[this->nrOfDices];
this->dices = allDices;
dices[nrOfDices]= new Dice(nrOfDices);
int count =1;
for (int i = 0; i < this->nrOfDices; i++)
{
allDices[i]->toss();
cout << "Dice "<< count << ": " << allDices[i]->getValue() << endl;
count ++;
}
}
My Dice.cpp:
void Dice::toss(){
this->value = rand()%this->nrOfSides+1; //Value is a private int in Dice class
}
如果您需要更多代码我可以发布,请告诉我!
答案 0 :(得分:0)
Dice **allDices = new Dice*[nrOfDices];
分配顶级指针,现在我们将所有行都放在内存中。添加列时
dices[nrOfDices]= new Dice(nrOfDices);
这不会向所有行添加新的Dice
。它会在有效范围Dice
的末尾添加一个新的dices
。您需要做的是使用循环并遍历所有行并为每个行添加Dice
,如
for (int i = 0; i < nrOfDices; i++)
dices[i] = new Dice(nrOfDices);
答案 1 :(得分:0)
如果你想分配所需的所有Dice对象,你只需要在索引nrOfDices(顺便使用的边界)中分配一个Dice对象:
void Handler::rollDices(){
Dice **allDices = new Dice*[nrOfDices];
this->dices = allDices;
int count =1;
for (int i = 0; i < this->nrOfDices; i++)
{
dices[i] = new Dice(nrOfDices);
allDices[i]->toss();
cout << "Dice "<< count << ": " << allDices[i]->getValue() << endl;
count ++;
}
}
答案 2 :(得分:0)
如何使用现代C ++?尝试这样的事情:
void Handler::rollDice()
{
std::vector<Dice> allDice( nrOfDice );
int count = 1;
for( const auto & d : allDice )
{
d.toss();
cout << "Die "<< count << ": " << d.getValue() << endl;
++count;
}
}