Я создал библиотеку для сериализации объектов, связанных с игрой, которая может помочь в игровых движках, и дело в том, что она работает, но просто при удалении классов выдает ошибку сегментации (сброс ядра).
Я создал заголовок, который содержит несколько классов, таких как 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
Ошибка сегментации (дамп ядра) при сериализации объекта в C++ ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка сегментации (сброс ядра) при сериализации объекта на C++ [дубликат]
Anonymous » » в форуме C++ - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Что вызывает ошибку сегментации и дамп ядра в этом исполняемом файле ELF?
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-