При перемещении переменной из локальной области в глобальную область генерируется ошибка «Stack Smashing error».C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 При перемещении переменной из локальной области в глобальную область генерируется ошибка «Stack Smashing error».

Сообщение Anonymous »

Проблема: Я столкнулся с ошибкой сбоя стека. У меня есть функция-член (в классе Game) под названием InitWindow(), которая инициализирует пустое окно. Вот функция для справки:

Код: Выделить всё

void Game::InitWindow()
{
SDL_Window* window = NULL;
SDL_Surface* screen_surface = NULL;

if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
return;
}

window = SDL_CreateWindow("Asteroid", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1920, 1080, SDL_WINDOW_SHOWN);
screen_surface = SDL_GetWindowSurface(window);

SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0xFF, 0xFF, 0xFF));
SDL_UpdateWindowSurface(window);

//Just a gameloop to keep window open until the user closes the window by pressing the `X` in the corner
SDL_Event e; bool quit = false; while( quit == false ){ while( SDL_PollEvent( &e ) ){ if( e.type == SDL_QUIT ) quit = true; } }

SDL_DestroyWindow(window);
SDL_Quit();
}
Эта функция вызывается внутри конструктора игры и работает отлично, как написано выше. Но поскольку мне нужен был доступ к window и screen_surface вне функции, я объявил их как переменные-члены класса Game. В результате оно имело то же ожидаемое поведение, что и раньше (открытие окна и ожидание, пока пользователь нажмет кнопку X окна), но теперь я получаю ошибку разрушения стека после того, как пользователь нажимает X. code>.
Что я пытался решить проблему:
Мне удалось придумать обходной путь, чтобы исправить ее. Я удалил вызов функции InitWindow(), в результате чего конструктор остался совершенно пустым. Затем я назвал его Game.InitWindow() в основной функции. Это исправило ситуацию. Однако мне бы хотелось, чтобы эта функция-член была частной и вызывалась при создании экземпляра объекта Game.
Любая помощь будет принята с благодарностью! Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... l-scope-to
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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