我正在创建一个简单的构造函数并初始化一个数组:
// Construtor
Cinema::Cinema(){
// Initalize reservations
for(int i = 0; i < 18; i++){
for(int j = 0; j < 12; j++){
setReservation(i, j, 0);
}
}
// Set default name
setMovieName("N/A");
// Set default price
setPrice(8);
}
setReservation函数:
void Cinema::setReservation(int row, int column, int reservation){
this->reservations[row][column] = reservation;
}
setMovieName函数:
void Cinema::setMovieName(std::string movieName){
this->movieName = movieName;
}
由于某些奇怪的原因,当我运行程序时,setMovieName函数会出现以下错误:“Program Received Signal:EXC_BAD_ACCESS”
如果我取出初始化预订数组的for循环,问题就会消失,电影名称设置没有任何问题。知道我做错了吗?
这是Cinema.h文件:
#ifndef Cinema_h
#define Cinema_h
class Cinema{
private:
int reservations[17][11];
std::string movieName;
float price;
public:
// Construtor
Cinema();
// getters/setters
int getReservation(int row, int column);
int getNumReservations();
std::string getMovieName();
float getPrice();
void setReservation(int row, int column, int reservation);
void setMovieName(std::string movieName);
void setPrice(float price);
};
#endif
答案 0 :(得分:2)
如果应该有18行和12列,那就是你需要对数组进行维度的方式:
int reservations[18][12];
最好还是使用静态常量,而不是“魔术数字”。此外,行和列很容易混淆,因此更好的想法是为迭代变量i
和j
提供更具描述性的名称。
class Cinema
{
static const int row_count = 18;
static const int column_count = 12;
int reservations[row_count][column_count];
//looping
Cinema() {
for (int row = 0; row < row_count; ++row) {
for (int column = 0; column < column_count; ++column {
...
}
}
}
};
答案 1 :(得分:1)
您是在某处初始化this->reservations
还是静态?另外,尺寸是否正确?看到它的定义很重要。否则可能就是原因。如果这不能解决您的问题,请设置一个断点,然后逐步执行代码,以查看失败的行。
答案 2 :(得分:1)
您实际上是在为预订分配空间吗?
如果它是固定大小,您是否将其声明为int[18][12]
?
如果没有,请不要使用int**
。这是c ++,你可以使用
std::vector<std::vector<int>>
编辑:你的问题是:
int reservations[17][11];
这有17/11维度,你正在重复18/12。
使用int[18][12]
。
答案 3 :(得分:1)
您的reservations
数组太小了。您应该使用行数/列数(即18和12)初始化它,而不是最高索引。初始化保留时,它将在数组末尾运行并损坏movieName
,之后当您尝试访问它时会发生任何事情。
此外,您可能已经知道这一点,但您不需要始终在C ++中使用this->
为成员变量访问加前缀。除非你有一个同名的局部变量(如你的setMovieName函数),否则这是隐含的。
答案 4 :(得分:1)
您声明了一个数组int reservations[17][11];
,但您的构造函数正在访问[0 to 17][0 to 11]
,这超出了有效范围[0 to 16][0 to 10]
。
您应该比该数组更喜欢std::vector<std::vector<int>>
。