【发布时间】:2015-08-25 02:28:31
【问题描述】:
我正在制作康威的人生游戏。我有两个类,一个用于细胞平面,另一个用于细胞。这些单元格就像一个二维链表,每个单元格有 4 个指向垂直和水平邻居的指针。当试图访问任何指向其他单元格的单元格指针或活动成员时,程序会崩溃。
我的代码
//game.h
#ifndef GAME_H_
#define GAME_H_
#include <iostream>
class cell{
public:
bool alive;
cell* top;
cell* bot;
cell* lef;
cell* rig;
cell(){
alive = false;
top = bot = lef = rig = nullptr;
}
cell* link(char);
int alive_neighbors();
void link_right(cell*);
void link_down(cell*);
void refresh_cell();
};
class field{
public:
int size;
cell * origin;
bool ** new_state;
cell *** fi;
field(int a);
~field();
};
#endif
和
//game.cpp
#include <iostream>
#include "game.h"
int cell::alive_neighbors(){
int num = 0;
(this->top)?((this->top->alive)?(++num):(num)||((this->top->rig)?((this->top->rig->alive)?(num++):(num)):(num))):(num);
(this->bot)?((this->bot->alive)?(++num):(num)||((this->bot->lef)?((this->bot->lef->alive)?(num++):(num)):(num))):(num);
(this->rig)?((this->rig->alive)?(++num):(num)||((this->rig->bot)?((this->rig->bot->alive)?(num++):(num)):(num))):(num);
(this->lef)?((this->lef->alive)?(++num):(num)||((this->lef->bot)?((this->lef->bot->alive)?(num++):(num)):(num))):(num);
return num;
}
void cell::link_right(cell* linkee){
this->rig = linkee;
linkee->lef = this;
}
void cell::link_down(cell* linkee){
this->bot = linkee;
linkee->top = this;
}
field::field(int a){
size = a;
for (int i= 0; i < size; i++){
fi[i] = new cell*[size];
for (int j = 0; j < size; j++){
fi[i][j] = new cell;
}
}
for (int i = 0; i < size; i++){
for (int j = 0; j < size -1; j++){
this->fi[i][j]->link_right(this->fi[i][j+1]);
this->fi[j][i]->link_down(this->fi[j+1][i]);
}
}
origin = fi[0][0]
}
field::~field(){
for (int i = size -1; i >= 0; i--){
for (int j = size -1;j >= 0; j--){
delete fi[i][j];
}
delete fi[i];
}
}
错误:
#include "game.h"
int main(){
field game(10);
std::cout << game.origin->alive << std::endl; //compiles but crashes :(
std::cout << game.origin->rig << std::endl; //also compiles and crashes without giving adress.
std::cout << game.fi[0][0]->alive; //even directly accessing the cell compiles and crashes.
}
【问题讨论】:
-
您分配了
fi[i],但是您在哪里为fi本身初始化和分配内存?你真的需要一个指针矩阵吗?那么向量的向量呢? -
将数组中的每个单元格存储为用于链接单元格的指针似乎更容易。每个单元格中的单元格指针可以直接从字段数组中的单元格指针设置。
-
我回复了,然后用他的答案修复了我的程序。他最初的询问显然是修辞,因为我没有在我提供的代码示例中的任何地方分配
fi。无论如何,您需要对此无礼吗,在我自己的项目中使用尽可能多的间接性有什么问题? -
OP 刚刚问了一个问题.. 每个人都曾编写过指针意大利面条... 还有为什么大家对这个问题投反对票?
标签: c++ arrays pointers member-functions