0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
|
||||||
1 | ||||||
Ошибка в чтении класса из файла в переменную-буфер11.10.2016, 21:03. Показов 821. Ответов 9
Метки нет (Все метки)
Я написал программу, суть которой заключается в следующем:
dat файл заполняется объектами класса field, который имеет два динамических поля float и int и спец. поле type, которое будет указывать, какое поле из двух (float или int) будет использоваться как "хранилище" данных. На C++ программирую недавно, поэтому "по традиции" все пошло не совсем гладко.
0
|
11.10.2016, 21:03 | |
Ответы с готовыми решениями:
9
Ошибка при чтении объекта класса из файла Ошибка при чтении нескольких объектов класса из файла Ошибка при вызове метода класса, при чтении из файла Ошибка в чтении функции из заголовочного класса (class header) |
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
|
||||||
11.10.2016, 21:56 | 2 | |||||
а так не пробовали:
1
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
11.10.2016, 21:58 | 3 |
в файл вы слили адреса переменных, а не значения по этим адресам. зачитали тоже какие-то адреса, а по этим адресам всякий хлам или вообще ошибка доступа. у вас простые типа. непонятно, зачем у вас в буфере указатели. переделайте на значения, а не на указатели на значения. если не хотите, то сливайте в память значения. а перед чтением - выделяйте память под каждое значение и потом значение каждого по отдельности читайте в ранее выделенную под значение память. последний вариант - изваращение, но вдруг вам именно это и надо.
1
|
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,627
|
|
11.10.2016, 22:01 | 4 |
Сто раз объясняли, что класс с указателями так не сохранишь. Надо каждый массив внутри класса записывать явно.
1
|
0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
|
|
11.10.2016, 22:16 [ТС] | 5 |
VAN0, очистил файл и начал заново... В файл вводит, да, по крайней мере размер его изменяется, но на экран вообще перестало выводить что либо. Поставил то же самое в c.read - не сработало, нажимаю "вывод" - вылетает, "попытка чтения или записи в защищенную память".
Добавлено через 4 минуты DU3, я так и думал, что там какой-то адрес сливается... ну, попробую изменить... nmcf, суть программы в том, чтобы как раз использовать "динамические" поля для экономии памяти, при этом должна быть переменная, которая указала бы на поле конкретного типа... т.е. я изначально взялся за невозможную задачу, и для того, чтобы она работала, придется вообще убрать указатели из класса?
0
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
11.10.2016, 22:19 | 6 |
конкретно в вашем случае вы все усугубили.
ну и неплохо бы увидеть какую-нибудь теорию или там теорему, которая бы утверждала, что использование динамических полей вместо статических ведет к экономии памяти
1
|
0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
|
|
11.10.2016, 22:25 [ТС] | 7 |
DU3, просто у меня тема курсового - создание аналога database access, только на C++, т.е. чтобы можно было удобно создавать небольшие базы данных, записи в которых с тем кол-вом и типом полей, которые установит пользователь, т.е. пользователь сам задает структуру таблицы... Я придумал, что каждая запись будет состоять из вектора полей, каждое поле - это несколько "ячеек" типа int, float и string, например, только будет еще "ячейка"-указатель на тип (целочисленное) - мы ведь в поле только одно значение заносим из нескольких... Вот и подумалось, что лучше будет сделать эти поля в классе динамическими и, зависимо от типа, просто зарезервировать нужное поле, чтобы не резервировать заодно и ненужные... Видимо, такой подход ни к чему, ни к какой "экономии" не приведет?
0
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
11.10.2016, 22:31 | 8 |
изучите существующие, прежде чем сочинять свою. т.к. вы свою сочините, начнете реализовывать, столкнетесь с кучей сюрпризов c++, потом, когда таки сделаете что задумывали выяснится, что задумали не то, не так и криво заимплементели в добавок. т.е.
я не спец по этой теме. простой запрос в гугле memory db выдает кучу инфы. ну например https://en.wikipedia.org/wiki/... y_database
0
|
0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
|
|
11.10.2016, 22:33 [ТС] | 9 |
DU3, Видимо, это действительно глупо... Ведь указатель содержит ТЕКУЩИЙ адрес переменной... Вот мы сгружаем переменную в файл, потом по адресу уже другое значение поступает, а мы сохранили в файле указатель на именно этот адрес, который уже запорчен... ааа, надо было раньше просто сесть и немного подумать над этими указателями... и в принципе, я же память на внешнем носителе использую, какая там разница до этой экономии и до этих динамических полей... Динамические поля можно будет использовать тогда, когда все будет проходить в ОЗУ, т е когда например буду работать через буфер, хотя все равно овчинка выделки не стоит... ну их, в общем, эти указатели... спасибо за помощь)
0
|
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,627
|
|
11.10.2016, 22:36 | 10 |
негритос, сохранять надо содержимое, а не сам указатель. И точно так же восстанавливать.
0
|
11.10.2016, 22:36 | |
11.10.2016, 22:36 | |
Помогаю со студенческими работами здесь
10
Ошибка в чтении из файла Ошибка в чтении из файла Ошибка в чтении из файла Ошибка при чтении файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |