*** stack smashing detected ***: terminated Как исправить и с чем связано? *** stack smashing detected ***: terminated Как исправить и с чем связано?#include #include int main() { char _playingField[20][41]; sprintf(_playingField[0], "########################################"); sprintf(_playingField[20], "########################################"); for(int i = 0; i

16 Мар 2023 в 19:52
317 +1
0
Ответы
1

Ошибка "stack smashing detected" связана с нарушением защиты стека (stack protection) в программе. Проблема возникает, когда запись данных выходит за границы выделенной области памяти. В вашем случае, это происходит из-за неправильного использования массива _playingField. Давайте исправим код:

#include <iostream>

#include <cstdio>


int main() {

  char _playingField[21][41]; // Измените размеры массива на 21x41 для учета строки окончания '\0'


  sprintf(_playingField[0], "########################################");

  sprintf(_playingField[20], "########################################");


  for (int i = 1; i < 19; i++) {

    _playingField[i][0] = '#';

    _playingField[i][39] = '#';

    _playingField[i][40] = '\0';

    for (int j = 1; j < 39; j++) {

      _playingField[i][j] = ' ';

    }

  }


  // Вывод игрового поля

  for (int i = 0; i < 21; i++) {

    std::cout << _playingField[i] << std::endl;

  }


  return 0;

}


В этом исправленном коде:

1. Размеры массива изменены на 21x41, чтобы включить строку окончания \0 для каждой строки.

2. Циклы для заполнения массива _playingField теперь правильно работают с границами массива.

Теперь код должен работать без ошибки "stack smashing detected".

17 Мар 2023 в 16:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир