Xcode 11db错误的事情:线程1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)
Xcode 11db error thing: Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
我一直在尝试在Xcode中编写游戏,其中游戏板是在终端中使用多维char类型数组绘制的。这款游戏就像一个地下城,当你进入一个新房间时,你可以踩到一些门。但有时我得到这个非常烦人的"(11db)"错误的东西,我的一行被突出显示,说:
"线程1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)"
这不是我第一次在Xcode中遇到(11db)错误,以前我已经能够修复它,但我似乎不能这次。这个错误是什么意思?我觉得最讨厌的是,这并不是每次都发生。有时它会在我运行程序时发生,当房间创建时,有时它会在你穿过一扇门后发生,我甚至可以没有它。下面是发生的代码:
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
//Check to see if door location is the same an an enemy or the player
for (int i = 0; i < enemies.size(); i++){
while ((door_x == enemies.at(i).getX() && door_y == enemies.at(i).getY()) || (door_x == player->getX() && door_y == player->getY())){
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 0);
}
}
room[door_y][door_x] = DOOR;//Place door on map
此错误发生在上述c++代码的最后一行。到底是什么错了,为什么?
这是创建新房间的整个函数和我的随机数函数。
int randomNumber(int max, int min){
int randomNumber = rand() %(max - min) + min;
return randomNumber;
}
void create_new_room(){
//Get random room height and room width
height = randomNumber(settings[0], settings[1]);
width = randomNumber(settings[2], settings[3]);
room = new char*[height];
for (int iter = 0; iter != height; iter++) {
room[iter] = new char[width];
}
for (int i = 0; i < height; i++){
for (int j = 0; j < width; j++){
room[i][j] = EMPTY;
}
}
enemies.clear();//Delete every object from the vector
//Create the enemies
int numEnemies = randomNumber(settings[4], settings[5]);
for (int i = 0; i < numEnemies; i++){
int randomHeight = randomNumber(height, 0);
int randomWidth = randomNumber(width, 0);
Enemy *e;//Create pointer to class to allow vector class push back
e = new Enemy(randomWidth, randomHeight, HEALTH);
enemies.push_back(*e);
delete e;//Delete pointer e to free memory and avoid any memory leak.
room[enemies.at(i).getY()][enemies.at(i).getX()] = ENEMY;//Place enemy on board
}
//Create Player
int player_y = randomNumber(height, 0);
int player_x = randomNumber(width, 0);
for (int i = 0; i < enemies.size(); i++){
while (player_x == enemies.at(i).getX()){
player_y = randomNumber(height, 0);
player_x = randomNumber(width, 0);
}
}
player = new Player(player_x, player_y, ATTACK);
//Place player on board
room[player->getY()][player->getX()] = PLAYER;
//Create a door
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
//Check to see if door location is the same an an enemy or the player
for (int i = 0; i < enemies.size(); i++){
while ((door_x == enemies.at(i).getX() && door_y == enemies.at(i).getY()) || (door_x == player->getX() && door_y == player->getY())){
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
}
}
room[door_y][door_x] = DOOR;//Place door on map
}
Settings[]是一个数组的设置,我有它从一个文本文件读取值与用户设置的最大和最小随机值。0 =最大高度1 =最小高度2 =最大宽度3 =最小宽度4 =最大敌人5 =最小敌人
我也使用srand(time(0))
在我的主要功能的顶部。
我的代码有点乱,但在这里。
你的代码正在崩溃,因为你正在解引用一个指针,并结束在一个坏的内存位。EXC_I386_GPFLT
基本上是例外,i386(你的CPU架构),一般保护故障,这意味着你的代码试图读或写内存,它不应该。
看看你的代码,要么room
没有设置(也许它仍然是NULL ?)或者它已经被释放了,或者door_x
或door_y
已经结束了比你分配给room
(也许你的randomNumber
方法有一个bug?)
你需要在代码崩溃之前打印出room
, door_x
和door_y
的值,并且你需要向我们展示剩下的代码,以便我们可以看到你如何分配room
和randomNumber
是如何工作的(以及如何计算出映射的大小)。
@zenith是对的,它是lldb
, LLVM调试器,而不是11db
。您应该阅读有关lldb
的教程,因为您可以从该提示符中获得大量信息。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值