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

Ошибка сегментирования при чтении файла

24.12.2013, 16:43. Показов 1636. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня!
Компилирую обычный .cpp: g++ main.cpp. "Ошибка сегментирования" возникает при чтении данных из файла. А именно при выборе пункта меню программы "Прочитать данные из файла".

Код функций чтения данных из файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//метод получения числа объектов в файле
unsigned int uifCountDataBaseObjects()
{
    ifstream ifsDataBase;
    ifsDataBase.open("out.txt", ios::binary);
    ifsDataBase.seekg(0, ios::end);
    return (int) ifsDataBase.tellg() / sizeof(clsAuto);
}
//метод чтения данных из файла
clsAuto& clsAuto::fnReadDataBase(unsigned int uiObjectNum)
{
    ifstream ifsDataBase;
    ifsDataBase.open("out.txt", ios::binary);
    ifsDataBase.read( (char*)this, sizeof(*this) );
    return (*this);
}
Case в функции main:
C++
1
2
3
4
5
6
7
8
9
case '1': 
            for(unsigned int i=0; i<uifCountDataBaseObjects(); i++)
            {
                newAuto.fnReadDataBase(i);
                lstAutoList.push_back(newAuto);
            }
            uiObjectsInList=lstAutoList.size();
            cout<<uiObjectsInList;
            break;
GDB показывает:
Program received signal SIGSEGV, Segmentation fault.
0xb7f91ebc in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&) ()
from /usr/lib/i386-linux-gnu/libstdc++.so.6
Может в функциях неправильно возвращается значение? В программировании под Linux еще новичок и всех нюансов пока не знаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2013, 16:43
Ответы с готовыми решениями:

Ошибка сегментирования (core dumped) при обработке файла большого размера
Поблочно обрабытываю текстовый файл ~1,5 Гб, при достижении конца файла получаю: Ошибка...

Ошибка сегментирования при использовании рекурсии
Суть проблемы в следующем: При функции со значением а(100) все работает отлично. Но как заставить...

Ошибка сегментирования при сравнивании файлов
Задача выполеяется ,но невсегда. Выскакивает ошибка сегментирования! нудно задать два каталога и...

Ошибка сегментирования при выводе меню
#include stdio.h #include stdlib.h typedef struct lib { int nomer; Номер читательского...

4
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
24.12.2013, 17:37 2
Цитата Сообщение от Raz24 Посмотреть сообщение
ifsDataBase.read( (char*)this, sizeof(*this) );
Не надо так делать.
Или по крайней мере надо очень хорошо представлять область применимости, чего в данном случае, судя по ошибке, не наблюдается.
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 2
24.12.2013, 19:30  [ТС] 3
NoMasters, Объясните, пожалуйста, тогда как лучше будет по-другому реализовать этот метод.
0
127 / 126 / 59
Регистрация: 22.01.2014
Сообщений: 462
23.01.2014, 02:00 4
Ошибка:
ifsDataBase.read( (char*)this, sizeof(*this) );
Лучше этого не делать для классов. Объекты класса - это специальные объекты, и запись по его адресу может привести к непредвиденным действиям.
Для сруктурных типов это можно делать, только осторожно.
0
1241 / 960 / 379
Регистрация: 02.09.2012
Сообщений: 2,936
26.01.2014, 00:08 5
То что вы задумали, называется сериализация.
Почитайте начало здесь. Там же есть страница на небольшой пример на C++. Дойдете до реализации, появятся конкретные вопросы, you are welcome
0
26.01.2014, 00:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 00:08
Помогаю со студенческими работами здесь

Ошибка сегментирования при компиляции
Когда компилирую через g++ компилируется, при запуске выдает ошибку сегментирования, а при...

Ошибка сегментирования при доступе к переменным класса
Имею: - CentOS - gcc 4.8 - Собственный класс - В этом классе есть объект = указатель на...

Ошибка сегментирования при чтении из файла.
char * line; while (! feof(source)) { line = &quot;&quot;; fgets(line, 255, source);...

Ошибка при чтении из файла
Проблемы с кодировкой. Выводит арбуз вместо слова арбуз. Как это исправить? private void...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru