Std::string и конструктор перемещения по умолчанию вызывают повреждение кучиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std::string и конструктор перемещения по умолчанию вызывают повреждение кучи

Сообщение Anonymous »

При рефакторинге кода я столкнулся с проблемой повреждения кучи.

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

namespace GPU
{
struct ShaderStage
{
public:
ShaderStage(ShaderStageType, const Path&);
ShaderStage() = default;
[Default copy/move constructors]

ShaderStageType StageType = {};
std::string Source = {};
std::filesystem::path BasePath = {};
};

struct Shader
{
public:
Shader(const Path& v, const Path& f);
Shader() = default;
[Default copy/move constructors]

ShaderStage VertexStage = {};
ShaderStage FragmentStage = {};
};

ShaderStage::ShaderStage(ShaderStageType type, const std::filesystem::path& path) : StageType(type), BasePath(path)
{
Source = [any string, loads file in this case];
};

Shader::Shader(const Path& v, const Path& f) :
VertexStage(ShaderStageType::Vertex, v),
FragmentStage(ShaderStageType::Fragment, f)
{
};
}

namespace GL
{
class Shader final : protected GPU::Shader
{
public:
Shader(gE::Window* window, GPU::Shader&&);
Shader() = default;
};

Shader::Shader(gE::Window* window, GPU::Shader&& INTERNAL_SETTINGS) : GPU::Shader(move(INTERNAL_SETTINGS))
{
[Actually constructs GL::ShaderStage, but I can replicate the issue with just moving GPU::ShaderStage around]
GPU::ShaderStage frag = move(FragmentStage);
GPU::ShaderStage vert = move(VertexStage);

FragmentStage = move(frag);
VertexStage = move(vert);
}
}
Вот как я создаю объект:

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

GPU::Shader shaderSettings("Resource/Shader/skybox.vert", "Resource/Shader/skybox.frag");

[GL::Shader _skyboxShader = {}]
_skyboxShader = GL::Shader(window, move(shaderSettings));
[SIGTRAP when _skyboxShader goes out of scope]
Размещение новых работ:

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

GPU::Shader shaderSettings("Resource/Shader/skybox.vert", "Resource/Shader/skybox.frag");

[GL::Shader _skyboxShader = {}]
_skyboxShader.~Shader();
new(&_skyboxShader) GL::Shader(window, move(shaderSettings));
[No error]
Мне хотелось бы думать, что у меня есть опыт работы с C++, но все это просто чушь. Я прошел несколько этапов отладки, но они не дали результатов.


Подробнее здесь: https://stackoverflow.com/questions/792 ... corruption
Ответить

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

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

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

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

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