Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
#1

Ошибка сегментирования при доступе к переменным класса - C++

27.07.2016, 17:02. Просмотров 441. Ответов 20
Метки нет (Все метки)

Имею:
- CentOS
- gcc 4.8
- Собственный класс
- В этом классе есть объект = указатель на другой класс (назовем его log).
- В log есть ряд переменных в private
- Для получения их значений создаю ряд методов get....value()

Проблема.
В определенных местах кода, при вызове get...value() получаю ошибку сегментирования. Ссылка на класс 100% рабочая. Ошибка вылетает исключительно только тогда, когда обращаюсь к любой из переменных класса log. Могу все что угодно делать в методе и будет работать, при обращении к переменным вываливаюсь в ошибку.

Что делал
Ну или пытался делать.
- При -03 вываливается ошибка шины, при -O0 получаю ошибку сегментирования
- Переводил переменные из private в public
- gdb. Хочу проверить значения этих переменных через print, получаю Access memory denied (или error)

Повторюсь, в определенных местах кода основного класса все работает, но есть где и не работает.
Что делал перед этим. Переделал все типы int в int32_t и long long в int64_t. До этого все работало.

Ума уже не приложу, куда копать. Буду рад дельным советам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2016, 17:02     Ошибка сегментирования при доступе к переменным класса
Посмотрите здесь:
Ошибка сегментирования при компиляции C++
Ошибка сегментирования при выводе меню C++ Linux
C++ Linux Ошибка сегментирования при чтении файла
Ошибка сегментирования при сравнивании файлов C++ Linux
Доступ к переменным базового класса при наследовании C++
C++ Linux Ошибка сегментирования (core dumped) при обработке файла большого размера
Ошибка при доступе к полям структуры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
27.07.2016, 20:14     Ошибка сегментирования при доступе к переменным класса #16
Купи PVS-Studio, раз не можешь показать код.
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
27.07.2016, 20:35  [ТС]     Ошибка сегментирования при доступе к переменным класса #17
Цитата Сообщение от castaway Посмотреть сообщение
Купи PVS-Studio, раз не можешь показать код.
стоит trial. Но в нем есть проблема. Приходится переделывать исходники под кроссплотформенность, чтобы он их закомпилил, а это бывает не очень быстро.
cppcheck смотрю делает тоже самое. Я уже даже все warning'и устранил на всякий случай

Добавлено через 1 минуту
Цитата Сообщение от Hikari Посмотреть сообщение
Ну еще сделать полную перестройку проекта, и видимо только пошаговкой ловить покемончика...
Иначе, как любят выражаться мои программайзеры: Дзень в сорц пока не достигнешь нирваны.
ну если valgrind не выручит, придется откатывать на более старую версию и переделывать по кусочкам действительно.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
27.07.2016, 20:48     Ошибка сегментирования при доступе к переменным класса #18
Ну тогда проверяй код "на глаз", скорее всего где-то выходишь за пределы доступной (выделенной) памяти.
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
27.07.2016, 21:07  [ТС]     Ошибка сегментирования при доступе к переменным класса #19
Никто не угадал. 785 строка кода =))
спасибо за valgrind, намекнул он железно, где проблема.

Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Ну тогда проверяй код "на глаз", скорее всего где-то выходишь за пределы доступной (выделенной) памяти.
так и есть.
Был код такого плана:
C++
1
2
3
4
 char  *buffer;
 char   *field1, *field2;
 field1 = buffer + 3;
 field2 = field1 + 5;
переделал в
C++
1
2
3
4
 char buffer[20];
 char   *field1, *field2;
 field1 = buffer + 3;
 field2 = field1 + 5;
И указатели field1 и field2 слетели в никуда. Отсюда послетали все объекты классе.
DrOffset
27.07.2016, 21:33
  #20

Не по теме:

Цитата Сообщение от karat39 Посмотреть сообщение
так и есть.
Это как раз и называется "в память пострелял".



Не по теме:

Цитата Сообщение от karat39 Посмотреть сообщение
cppcheck смотрю делает тоже самое.
Нет, не делает. Код он не компилирует.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2016, 21:35     Ошибка сегментирования при доступе к переменным класса
Еще ссылки по теме:
Ошибка EAccessViolation при доступе к элементам массива C++ Builder
Получение доступа к переменным класса из другого класса C++
Ошибка при попытке использовать объект класса в определении другого класса Visual C++
Удаление экземпляра класса в функции самого класса (Ошибка при отладке) C++
Ошибка в коде (Ошибка сегментирования (core dumped) C++

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

Или воспользуйтесь поиском по форуму:
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 74
27.07.2016, 21:35  [ТС]     Ошибка сегментирования при доступе к переменным класса #21
Цитата Сообщение от DrOffset Посмотреть сообщение
Это как раз и называется "в память пострелял".
буду знать, а то стеснялся спросить =)
Yandex
Объявления
27.07.2016, 21:35     Ошибка сегментирования при доступе к переменным класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru