gpt4 book ai didi

c++ - C++ 新手, "EXC_BAD_ACCESS"错误我不明白

转载 作者:行者123 更新时间:2023-11-28 07:44:56 25 4
gpt4 key购买 nike

我正在尝试将二维元胞自动机从 Processing 转换为 openFrameworks (C++)。我已经为细胞和生命游戏功能编写了类。应用程序构建成功但立即崩溃并出现以下错误:线程 1:程序接收到信号:“EXC_BAD_ACCESS”。

这是我的生活类游戏的标题

#include "Cell.h"

class GoL {

public:
GoL();
void init();
void generate();
void display();
void run();

int w = 20;
int cols;
int rows;

std::vector<vector<cell> > board;


};

这里是实现:

#include "GoL.h"

GoL::GoL() {
cols = ofGetWidth() / w;
rows = ofGetHeight() / w;
board[rows][cols];
init();
}

void GoL::run() {
generate();
display();
}

void GoL::init() {
for (int i = 0; i < cols; i ++) {
for (int j = 0; j < rows; j ++) {
board[i][j] = *new cell(i * w, j * w, w);
}
}
}

void GoL::generate() {
for (int i = 0; i < cols; i ++) {
for (int j = 0; j < rows; j ++) {
board[i][j].savePrevious();
}
}
for (int x = 0; x < cols; x ++) {
for (int y = 0; y < cols; y ++) {
int neighbours = 0;
for (int i = -1; i <= 1; i ++) {
for (int j = -1; j <= 1; j ++) {
neighbours += board[(x + i + cols) % cols][(y + j + rows) % rows].previous;
}
}
neighbours -= board[x][y].previous;
// Rules of Life
if ((board[x][y].state == 1) && (neighbours < 2)) board[x][y].newState(0);
else if ((board[x][y].state == 1) && (neighbours > 3)) board[x][y].newState(0);
else if ((board[x][y].state == 0) && (neighbours == 3)) board[x][y].newState(1);
}
}
}

void GoL::display() {
for (int i = 0; i < cols; i ++) {
for (int j = 0; j < rows; j ++) {
board[i][j].display();
}
}
}

错误出现在 vector.h 文件、GoL 头文件以及我在 GoL 实现中调用 init() 方法的位置。非常感谢任何帮助。

最佳答案

你在这里有越界访问,因为 vector 的大小为 0:

board[rows][cols];

您可以像这样在构造函数初始化列表中初始化 vector :

GoL::GoL() : cols(ofGetWidth()/w), rows(ofGetHeight()/w), board(rows, std::vector<cell>(cols))
{
}

这会将 board 初始化为 rows 大小,并且它的每个元素都将是一个大小为 cols 的 vector 。然后你可以给它的元素赋值:

cell c = ...;
board[i][j] = c;

关于c++ - C++ 新手, "EXC_BAD_ACCESS"错误我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com