• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Самопроизвольное обнуление переменной

Motobiker

Member
Как такое возможно?

Код:
void Game::Start(int i)
{
  player_ID = i;
  Serial.println("start, player ID - " + String(player_ID));
  init_game_flag = false;
  ns[1] = num_shots_1;
  ns[2] = num_shots_2;
  ns[3] = num_shots_3;
  ns[4] = num_shots_4;
  ns[5] = num_shots_5;
  ns[6] = num_shots_6;
  ns[7] = num_shots_7;
  ns[8] = num_shots_8;
  Serial.println("start, player ID - " + String(player_ID));
}
terminal:
start, player ID - 1
start, player ID - 0
 

Motobiker

Member
Если смещать строчку с выводом переменной вверх, то последнее место с правильным значением оказывается здесь:

Код:
void Game::Start(int i)
{
  player_ID = i;
  Serial.println("start, player ID - " + String(player_ID));

  init_game_flag = false;
  ns[1] = num_shots_1;
  ns[2] = num_shots_2;
  ns[3] = num_shots_3;
  ns[4] = num_shots_4;
  ns[5] = num_shots_5;
     Serial.println("start, player ID - " + String(player_ID));
  ns[6] = num_shots_6;
  ns[7] = num_shots_7;
  ns[8] = num_shots_8;


}
start, player ID - 1
start, player ID - 1
 

Motobiker

Member
нашел ошибку
при определении массива не указал размер
Код:
int ns[];
исправил на
Код:
int ns[8];
 

enjoynering

Well-known member
Видел такой глюк. Обычно первая и вторая запись декларации массива верна. Но если в вашем проекте код занимает почти всю кучу и стек, то могут происходить такие чудеса. Сам один раз с этим столкнулся.
 
Сверху Снизу