SFML C++ Текст недействителен бесплатно / удалить
В настоящее время я использую SFML 2.4.2-1 на Arch Linux, и у меня есть некоторые проблемы с текстом.
Я собираю с g++
(Я тоже пробовал с clang++
).
Я выделил свой пример и получил тот код, который вылетает каждый раз:
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <memory>
int main()
{
sf::RenderWindow win(sf::VideoMode(1280, 720), "Arcade sfml");
sf::Font font;
if (!font.loadFromFile("arial.ttf"))
{
throw std::exception();
}
sf::Text text("oui", font);
win.draw(text);
win.display();
sleep(10000);
win.close();
}
Сбой текстового деструктора с неверным освобождением / удалением.
Вот вывод valgrind:
==6297== Warning: noted but unhandled ioctl 0x6458 with no size/direction hints.
==6297== This could cause spurious value errors to appear.
==6297== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
==6297== Invalid free() / delete / delete[] / realloc()
==6297== at 0x4C2C20A: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6297== by 0x401D75: __gnu_cxx::new_allocator<sf::Vertex>::deallocate(sf::Vertex*, unsigned long) (new_allocator.h:110)
==6297== by 0x401D43: std::allocator_traits<std::allocator<sf::Vertex> >::deallocate(std::allocator<sf::Vertex>&, sf::Vertex*, unsigned long) (alloc_traits.h:442)
==6297== by 0x401CE3: std::_Vector_base<sf::Vertex, std::allocator<sf::Vertex> >::_M_deallocate(sf::Vertex*, unsigned long) (stl_vector.h:178)
==6297== by 0x401C4D: std::_Vector_base<sf::Vertex, std::allocator<sf::Vertex> >::~_Vector_base() (stl_vector.h:160)
==6297== by 0x401BDC: std::vector<sf::Vertex, std::allocator<sf::Vertex> >::~vector() (stl_vector.h:427)
==6297== by 0x401ABF: sf::VertexArray::~VertexArray() (VertexArray.hpp:45)
==6297== by 0x401B32: sf::Text::~Text() (Text.hpp:48)
==6297== by 0x4016CB: main (main.cpp:15)
==6297== Address 0x6031b0 is 16 bytes inside data symbol "_ZTVN2sf11VertexArrayE"
Я не могу понять, почему он продолжает сбой с той же ошибкой. Также, когда я выполняю с помощью valgrind, сама программа работает должным образом, то есть я имею в виду, что текст печатается по назначению, но эта ошибка сохраняется и приводит к аварийному завершению программы при ее выполнении в одиночку.
Редактировать:
версия g++: g++ (GCC) 6.3.1 20170109
версия clang++: clang version 3.9.1 (tags/RELEASE_391/final)
Для моего проекта я собираю разделяемую библиотеку, но для этого примера это был простой исполняемый файл:
Общая библиотека:
-fPIC -std=c++14 -W -Wall -Wextra -shared -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
Простой исполняемый файл:
-std=c++14 -W -Wall -Wextra -lsfml-graphics -lsfml-window -lsfml-system