【发布时间】:2017-09-19 16:17:58
【问题描述】:
我是 C++ 的新手(Java 中的背景),并且遇到了一个奇怪的数组问题。 我有以下涉及掷骰子的代码,该数组用于存储以前的掷骰子。
#include <stdlib.h> //c file for random number generator
#include <iostream>
#include "Dice.h";
using namespace std;
int previousTurns[10];
int count = 0;
void Dice::roll()
{
cout<<"Rolling Dice....";
int seed = rand() %100;
srand(seed);
int roll = rand() %6 + 1;
cout<<"You have rolled a " << roll << "\n";
previousTurns[count] = roll;
count++;
}
我还有一个头文件 Dice.h(包括我还没有实现的其他方法):
#ifndef DICE_H_
#define DICE_H_
class Dice
{
private:
int previousTurns[10];
int count;
void extendArray(int a[]);
int size();
public:
void roll();
void previousRolls();
void displayArray();
};
#endif /* DICE_H_ */
除了“previousTurns[count] = roll”这一行之外,所有这些代码都可以工作,编译器一旦到达这一行就崩溃了,没有任何错误。
【问题讨论】:
-
你用的是什么编译器?你能创建一个minimal reproducible example吗?
-
你滚动了多少次......?
-
您有两次
previousTurns和count,一次在类中,一次作为在源文件中声明的全局变量。不应该是这里的问题,但至少它是令人困惑的 -
...,也许是问题所在。你初始化了
count,但是你初始化了Dice::count吗?如果你不这样做,那么previousTurns[count]是未定义的行为 -
使用
std::vector是一个很好的解决方案。extendArray看起来不祥。由于缺乏可重复的例子而投票结束。