Я создал библиотеку для сериализации объектов, связанных с игрой, которая может помочь в игровых движках, и дело в том, что она работает, но просто при удалении классов выдает ошибку сегментации (сброс ядра).
Я создал заголовок, который содержит несколько классов, таких как 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
1736637258
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79349077/segmentation-fault-core-dumped-when-serializing-a-object-in-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия