调用函数时,指针指针获取EXC_BAD_ACCESS

时间:2016-03-01 20:48:21

标签: c++ pointers exc-bad-access

我有两个类,一个叫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
}

如果您需要更多代码我可以发布,请告诉我!

3 个答案:

答案 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;
        }
    }