SFML - место чтения нарушения доступа при сохранении RenderTexture в изображение 0xC0000005 - PullRequest
0 голосов
/ 23 января 2019

Я использую Visual Studio 2017. При отладке он указывает на строку 11

texture.getTexture().copyToImage().saveToFile("C:/test.bmp");

с ошибкой

Исключение, сгенерированное в 0x54B06B9E (sfml-graphics-2.dll) в Project2.exe: 0xC0000005: Место чтения нарушения доступа 0xCCE6C37F.

Я хочу сохранить текстуру в файл .bmp.

#include<iostream>
#include<SFML/Graphics.hpp>

int main()
{
    using namespace sf;
    RenderTexture texture;
    texture.create(800, 600);
    texture.display();
    texture.clear(Color::Black);
    texture.getTexture().copyToImage().saveToFile("C:/test.bmp");

    return 0;
}

EDIT

Поскольку мы обнаружили, что именно фрагмент .saveToFile("C:/test.bmp") вызывает проблему, код работает без него

ВТОРОЕ РЕДАКТИРОВАНИЕ

Я получил пакеты SFML вручную, я включаю их из заданной папки каждый раз, когда создаю новый проект, и связываю библиотеки, также добавленные вручную через внешнюю папку lib

ТРЕТЬЕ РЕДАКТИРОВАНИЕ

После некоторой работы мне удалось исправить библиотеки отладки и выпустить библиотеки, теперь код выдает исключение

Ошибка проверки во время выполнения # 2 - стек вокруг переменной 'texture' поврежден.

Скриншот со всем выводом и кодом: enter image description here

Другое дело, что когда я продолжаю, не обрабатывая исключение, оно выдает мне следующее:

Необработанное исключение 0x00D26859 в Project2.exe: код инструментария cookie стека обнаружил переполнение буфера в стеке.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Я нашел ответ, проблема заключалась в том, что я не использовал .dll, скомпилированные для VS 2017, я использовал вместо этого скомпилированные для 2015 года, переключил их, и это работает как чудо

0 голосов
/ 25 января 2019

Мое лучшее предположение, что вы как-то неправильно связываете библиотеки.Убедитесь, что у вас есть библиотеки отладки в конфигурации отладки, а библиотеки выпуска в конфигурации выпуска.

Помните, что библиотеки отладки обычно заканчиваются на «d».Если вы неправильно настроили библиотеки отладки, вы не сможете отладить свой код, и это объясняет, почему вы получаете сообщение об ошибке плохое .

Я оставляю здесь ссылка на форум SFML с кем-то с похожей проблемой.

Надеюсь, это поможет.


Как примечание, для начинающих с Я настоятельно рекомендую установитьбиблиотека с использованием пакетов NuGet (щелкните правой кнопкой мыши свое решение -> Управление пакетами NuGet -> найдите SFML -> установить)

Это работает для SFML, но не для OpenGL.

...