Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521

Сериализация

18.09.2019, 13:00. Показов 1784. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сохранить объект в файл. Сделал по примеру http://itnotesblog.ru/note.php?id=166
Сохраняет нормально(наверное, файл создается и в нем что то есть), при попытке чтения
C++
1
stream >> size >> current;
Вылетает ошибка "Приложение остановлено, так как оно получило сигнал от операционной системы SIGSEGV Segmentation fault"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//-----------------------------------------------------
void graficData::saveToFile(QString filename){
        QFile file(filename);
        QDataStream stream( &file );
 
        file.open( QIODevice::WriteOnly );
        stream << size << current;
        for(int i = 0; i < current; ++i)
            stream << point_x[i] << point_y[i];
        file.close();
}
//-----------------------------------------------------
void graficData::loadFromFile(QString filename){
    QFile file(filename);
    QDataStream stream( &file );
 
    file.open( QIODevice::ReadOnly );
    stream >> size >> current;
    for(int i = 0; i < current; ++i)
        stream >> point_x[i] >> point_y[i];
    file.close();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2019, 13:00
Ответы с готовыми решениями:

Сериализация
Добрый день У меня есть редактор виджета состоящий из 2-х частей(в левой находится дерево, в которое добавляются строки, столбца всегда...

Сериализация JSON
Подскажите дураку как создать следующий JSON средствами QJsonArray QJsonObject QJsonDoument QJsonValue, не могу разобраться { ...

Сериализация массива данных с RapidJSON
мне нужно в json файл записать массив структур. пока всё пробую сделать первую запись где бы было имя массива и скобочки. но пока ничего...

9
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
18.09.2019, 13:14
Pantheonptz, проверь не вылазишь ли ты за пределы массивов point_x[i] или point_y[i].

Добавлено через 7 минут
Точнее проверь, адекватно ли считываются данные size и current
0
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
18.09.2019, 13:39  [ТС]
Сообщение вылезает при попытке чтения size и current
C++
1
stream >> size >> current;
Добавлено через 12 минут
При считывании иннициализирую объект.
C++
1
2
3
4
5
6
7
8
9
10
11
void DrawGraph::on_loadBtn_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
            tr("Choose filename"), "", tr("graphic files (*.grf)"));
    points->loadFromFile(fileName);
    QGraphicsScene *scene = new QGraphicsScene(ui->graphicsView);
    QPen pen(Qt::red, 3);
    points = new graficData(0);
    points->drawGraf(scene, pen);
    ui->graphicsView->setScene(scene);
}
Далее считываю size. Чтение из файла происходит нормально, а вот при записи
C++
1
this->size = size;
Вылезает эта ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void graficData::loadFromFile(QString filename){
    QFile file(filename);
    QDataStream stream( &file );
    int size, current;
    file.open( QIODevice::ReadOnly );
    stream >> size;
    this->size = size;
    stream >> current;
    this->current = current;
    point_x = new double[size];
    point_y = new double[size];
    for(int i = 0; i < current; ++i)
        stream >> point_x[i] >> point_y[i];
    file.close();
}
Добавлено через 1 минуту
конструктор
C++
1
2
3
4
5
6
7
graficData::graficData(int size)
{
    this->size = size;
    this->current = 0;
    this->point_x = new qreal[size];
    point_y = new qreal[size];
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.09.2019, 13:58
Опять сишапшик что ли? Ну нет сборки мусора в C++.

Добавлено через 1 минуту
А по сути вопроса лучше использовать json формат и человеком нормально читается и другими программами.
0
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
18.09.2019, 13:59  [ТС]
Да, я привык к шарпу и яве. Но какое отношение сборка мусора имеет к присваиванию значения полю объекта?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.09.2019, 14:08
Цитата Сообщение от Pantheonptz Посмотреть сообщение
Да, я привык к шарпу и яве. Но какое отношение сборка мусора имеет к присваиванию значения полю объекта?
К тому что вижу гАвнокод и дальше желания читать уже нет.
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
18.09.2019, 14:22
Pantheonptz, проверьте выделена ли память под объект points когда вызывается метод
C++ (Qt)
1
points->loadFromFile(fileName);
Если например под этот объект вы выделяете память в каком нибудь методе типа createGraf, то не вызвав его, а пытаясь загрузиться из файла при старте программы можно получить такую ошибку.
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
18.09.2019, 14:50
Цитата Сообщение от Avazart Посмотреть сообщение
лучше использовать json формат
Поддерживаю, тем более в qt есть инструмент для этого.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.09.2019, 16:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bool graficData::loadFromFile(QString filename)
{
    QFile file(filename);
 
    int size, current;
    if(!file.open( QIODevice::ReadOnly )) /* А если файла такого нет ? */ 
       return false;
 
    stream >> size;
    this->size = size;
    stream >> current;
    this->current = current;
    
    delete point_x;   // Память не резиновая не умеешь работать с ней используй QVector
    delete point_y;
 
    point_x = new double[size];
    point_y = new double[size];
 
    for(int i = 0; i < current; ++i)
        stream >> point_x[i] >> point_y[i]; /*  успешность чтения как бы тоже желательно проверять */
  
    return true;
}

C++
1
2
3
4
5
6
7
8
9
graficData::graficData(int size)
   :size(size),
    current(0),
    point_x(new qreal[size]),
    point_y(new qreal[size])
{
   /* Используем список инициализации */
 
}
2
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.09.2019, 00:11
Форум глючил забыл исправить, там же массивы

C++
1
2
delete[] point_x; 
delete[] point_y;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2019, 00:11
Помогаю со студенческими работами здесь

Windows Forms и сериализация. Сериализация контрола
Привет всем. Для того что бы набраться опыта делаю игрушку-лабиринт. В есть старт и финиш. Нужно вести мышкой и не попадать на стены. Игру...

Сериализация
Доброго времени суток,есть пару вопросов по сериализации. 1. Допустим есть некий класс содержащий вектор структур. В программе...

Сериализация
Нужно из 1-го класса передать во второй класс объект, который будет превращен в последовательность байтов, далее записать эту...

Сериализация
Здравствуйте, подскажите мне в чем проблема... Я хочу сохранить класс в файл с помощью сериализации и десериализовать потом этот класс у...

Сериализация
есть небольшая программа вот структура данных которая в ней используется class table { public: int number,kol,year; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru