Ошибка сегментации (дамп ядра) при сериализации объекта в C++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка сегментации (дамп ядра) при сериализации объекта в C++

Сообщение Anonymous »

Я создал библиотеку для сериализации объектов, связанных с игрой, которая может помочь в игровых движках, и дело в том, что она работает, но просто при удалении классов выдает ошибку сегментации (сброс ядра).
Я создал заголовок, который содержит несколько классов, таких как Data, Scenes, Object, SpawnedObject... ...
// data.hpp
#include
#include
#include
#include
#include
#include

class Texture { // Just an interface, no serialization
public:
std::string type;

virtual ~Texture() = default;
};

class Object {
public:
Texture texture;
std::vector scripts; // Luau, {name, scriptContent}
int defaultState = 0;

~Object() {
}
};

class SpawnedObject {
public:
Object object;
int xPx; // In Pixels
int yPx;
int xSpx; // In Sub-pixels (1/256 of a pixel)
int ySpx;
int groundAngle;

~SpawnedObject() {
}
};

class Scene {
public:
std::vector objects;

~Scene() {
}
};

class Data {
public:
std::vector levels;
Scene startPoint;
std::vector objects;

~Data() {
}
};

class TileTexture : public Texture {
public:
std::string tile;
std::string type = "tile";
int objectNum;

~TileTexture() override {
}
};

class ImageTexture : public Texture {
public:
std::string image;
std::string type = "image";

~ImageTexture() override {
}
};

После этого я создал библиотеку сериализации классов, которая довольно проста: она помещает все байты класса в файл (я могу ошибаться), и для этого я использовал reinterpret_cast< char*>; и сохранил его в файлах .rsgdk
// serialize.hpp
#include
#include
#include
#include "../include/data.hpp"

void serialize_class(Data obj, std::string filePath);
void deserialize_class(Data& outputOBJ, std::string filePath);

// serialize.cpp
#include "../include/serialize.hpp"

void serialize_class(Data obj, std::string filePath) {
std::ofstream outFile(filePath, std::ios::binary);
if (outFile) {
outFile.write(reinterpret_cast(&obj), sizeof(obj));
outFile.close();
}
}

void deserialize_class(Data& outputOBJ, std::string filePath) {
std::ifstream inFile(filePath, std::ios::binary);
if (inFile) {
inFile.read(reinterpret_cast(&outputOBJ), sizeof(outputOBJ));
inFile.close();
}
}

Затем я создал простой тестовый скрипт, который добавляет сцену в класс данных, сериализует ее, десериализует и сравнивает количество сцен класса, который был сериализован, и того, который не был сериализован. , но он просто выдает ошибку сегментации (сброс ядра).
// dsl_test.cpp
#include "data_serializer/include/serialize.hpp"

int main() {
Data data;
Scene scene;
data.levels.push_back(scene);
serialize_class(data, "test.rsgdk");

Data output;
deserialize_class(output, "test.rsgdk");
std::cout

Подробнее здесь: https://stackoverflow.com/questions/793 ... bject-in-c
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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