Xcode 11db ошибка: Think 1: Exc_bad_access (code = exc_i386_gpflt)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Xcode 11db ошибка: Think 1: Exc_bad_access (code = exc_i386_gpflt)

Сообщение Anonymous »

Я пытался написать игру в Xcode, где в терминале нарисована игровая доска с использованием многомерного массива типа char. Предполагается, что игра похожа на подземелье, где есть двери, на которые вы можете наступить, и когда вы делаете новую комнату в создании. Но иногда я получаю это действительно раздражающее «(11db)» «ошибка», когда одна из моих строк выделяется, говоря: < /p>


». Поток 1: exc_bad_access (code = exc_i386_gpflt) (11db) Ошибка в Xcode, и ранее я смог ее исправить, но я не могу казаться на это время. Что означает эта ошибка? Что я нахожу самой раздражающей частью, что это не происходит каждый раз. Иногда это происходит, как только я запускаю программу, когда комната будет создана, в других случаях это происходит после того, как вы пройдете через дверь, и я даже смог уйти без нее. Вот код, где это происходит: < /p>

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
< /code>

Эта ошибка происходит в последней строке приведенного выше кода 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[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
}
< /code>

Настройки [] - это массив настройки, который у меня есть, который считывает значения из текстового файла с настройками пользователя для случайных значений MAX и MIN. 0 = максимальная высота 1 = мин высота 2 = максимальная ширина 3 = ширина мин 4 = максимальный враг 5 = мин враг < /p>

Также я использую srand (время (0)) < /code> в верхней части моей основной функции.>

Подробнее здесь: https://stackoverflow.com/questions/328 ... i386-gpflt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»