指针在函数上崩溃的数组

时间:2015-02-03 16:55:24

标签: c++

我有一个指针数组,它们都有一些价值和功能。当函数运行时,它似乎无法找到值。

使程序崩溃的代码几乎位于底部。

我班级的.h文件:

#ifndef DICE_H
#define DICE_H
class Dice
{
    public:
        int value;
        int nrOfFaces;
        Dice();
        void toss();
};
#endif

我班上的.cpp文件:

#include "Dice.h"
#include <cstdlib>
using namespace std;

Dice::Dice()
{
    nrOfFaces = 6;
    value = 0;
}
//this function gives the dice a new random value
void Dice::toss()
{
    value = rand() % nrOfFaces + 1;
}

main()函数:

int main(){
    srand(static_cast<unsigned>(time(NULL)));

    Playboard* board = new Playboard();
    Dice** dice = new Dice*[5];
    int round = 0;

    while (1){
        system("CLS");
        board->PrintBoard();

        cout << endl;

        cout << endl << "Press Enter to roll the dices" << endl;
        getchar();

        for (int i = 0; i < 5; i++)
        {
            dice[i]->toss(); //ERROR
            cout << dice[i]->value << AddSpaces(2);
        }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您分配了一个包含五个指针的数组,但实际上并没有为任何指向指针的指针分配内存,当您取消引用那些(未初始化的)指针时会导致undefined behavior。请记住,未初始化的内存的值是 indeterminate (实际上看似随机)。

在这种情况下,无需完全使用指针或动态分配,只需使用std::array

std::array<Dice, 5> dice;

并用作普通数组:

dice[i].toss();

答案 1 :(得分:1)

dice[i]是指针类型。而且你永远不会为它指定一个有效的指针。

变化:

    for (int i = 0; i < 5; i++)
    {
        dice[i]->toss(); //ERROR
        cout << dice[i]->value << AddSpaces(2);
    }

要:

    for (int i = 0; i < 5; i++)
    {
        dice[i] = new Dice();  // Assign a VALID POINTER to dice[i]
        dice[i]->toss(); //NO ERROR
        cout << dice[i]->value << AddSpaces(2);
    }