我有一个指针数组,它们都有一些价值和功能。当函数运行时,它似乎无法找到值。
使程序崩溃的代码几乎位于底部。
我班级的.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;
}
答案 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);
}