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

C++

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

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

27.07.2016, 17:02. Просмотров 461. Ответов 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. До этого все работало.

Ума уже не приложу, куда копать. Буду рад дельным советам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2016, 17:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка сегментирования при доступе к переменным класса (C++):

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

Ошибка EAccessViolation при доступе к элементам массива - C++ Builder
Ошибка вылазит в двух местах (и там и там ругается на rtl60.bpl) void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString...

Ошибка при объявлении класса - C++ Builder
А в этом случае как быть?: Цель: создаю точки, вывожу список точек в ListBox (через класс). Вот структура для списка точек: ...

Ошибка при использовании класса - C++ Builder
Решил написать чат. Написал маленький класс сервера: class ServChat { private: unsigned int unNumber; unsigned int umNumber; ...

Ошибка при реализации метода класса - C++ Builder
Всем здрасьте. Возникла проблема при реализации метода класса. Никак не могу понять, в чём дело. Помогите, пжалста :/ Объявление...

Ошибка при вызове метода класса-наследника - C++ Builder
помогите не знаю что не правильно сделать выходит что в мемо выводит с класса родителя все нормально методом inform() а вот с наследника...

20
hoggy
6652 / 2838 / 486
Регистрация: 15.11.2014
Сообщений: 6,270
Завершенные тесты: 1
27.07.2016, 17:06 #2
ошибка в 36 строке, я думаю.
1
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 101
27.07.2016, 17:07  [ТС] #3
Цитата Сообщение от hoggy Посмотреть сообщение
ошибка в 36 строке, я думаю.
совет дельный =). Но код раскрыть не могу.

Может будет какой алгоритм выхода из такой ситуации. =)
Может где в gdb что подсмотреть и станет ясно.
0
hoggy
6652 / 2838 / 486
Регистрация: 15.11.2014
Сообщений: 6,270
Завершенные тесты: 1
27.07.2016, 17:08 #4
Цитата Сообщение от karat39 Посмотреть сообщение
Может будет какой алгоритм выхода из такой ситуации
телепаты в отпуске.
удач, чоу.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,797
Записей в блоге: 17
27.07.2016, 17:22 #5
Цитата Сообщение от hoggy Посмотреть сообщение
ошибка в 36 строке, я думаю.
Я ставлю на 42-рую.
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 101
27.07.2016, 17:24  [ТС] #6
Ну ладно, найду, расскажу в какой. Пока гадайте =)
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,797
Записей в блоге: 17
27.07.2016, 17:26 #7
Цитата Сообщение от karat39 Посмотреть сообщение
Пока гадайте =)
На то он и форум галок и колдунов....
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 101
27.07.2016, 17:32  [ТС] #8
Ребята. Ну чего мне gdb дает "Cannot access memory at address 0x1007ffe5e96e8c0"?

Печатаю переменную: print log_stack_size
Выдает: Cannot access memory at address 0x1007ffe5e96e8c0

И так со всеми переменными класса.
Куда копать, кого крошить =))
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
27.07.2016, 17:56 #9
Крайне не рекомендую публиковать адреса, которые могут стать объектом целенаправленной хакерской атаки. Это ещё опаснее, чем публиковать исходный код. Даже просто сообщения об ошибках или даже общие описания их природы могут стать опаснейшей утечкой информации, подвергая ваш программный продукт риску.
1
Hikari
Хитрая блондиночка $)
1447 / 954 / 285
Регистрация: 21.12.2015
Сообщений: 3,798
27.07.2016, 18:05 #10
Цитата Сообщение от karat39 Посмотреть сообщение
Куда копать, кого крошить
А исходный код и вправду такой секретный?
Цитата Сообщение от karat39 Посмотреть сообщение
Ну чего мне gdb дает "Cannot access memory at address 0x1007ffe5e96e8c0"?
У тебя нет доступа к переменной\полю. Ты может быть ее не инициализировал, а в коде пытаешься использовать как указатель. Или объект неверно создан.
0
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
27.07.2016, 18:34 #11
Цитата Сообщение от karat39 Посмотреть сообщение
В определенных местах кода, при вызове get...value() получаю ошибку сегментирования. Ссылка на класс 100% рабочая. Ошибка вылетает исключительно только тогда, когда обращаюсь к любой из переменных класса log. Могу все что угодно делать в методе и будет работать, при обращении к переменным вываливаюсь в ошибку.
Может память где пострелял?
Valgrind`ом прогони.
Еще можешь какой-нибудь статический анализатор запользовать - если что-то найдет, исправляй все, что не false positive. Стрельба по памяти может косвенным образом влиять на другие участки программы.
1
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 101
27.07.2016, 19:19  [ТС] #12
Цитата Сообщение от Hikari Посмотреть сообщение
А исходный код и вправду такой секретный
к сожалению

Цитата Сообщение от Hikari Посмотреть сообщение
У тебя нет доступа к переменной\полю. Ты может быть ее не инициализировал, а в коде пытаешься использовать как указатель. Или объект неверно создан.
за подсказку спасибо. Появился повод (все руки не доходили) проинициализировать у класса все три переменные из private. Но проблема не ушла. Дело в том, что в одном участке кода все работает, и допустим через N строчек кода, такой же вызов вываливает в ошибку.

Цитата Сообщение от DrOffset Посмотреть сообщение
Valgrind`ом прогони.
эхх.. все таки придется его изучить. Откладывал откладывал, а теперь повод есть =)
0
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
27.07.2016, 19:23 #13
karat39, начни со статического анализа. cpp-check хотя бы, с максимальным уровнем предупреждений. Это элементарно делается.
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 101
27.07.2016, 19:41  [ТС] #14
Цитата Сообщение от DrOffset Посмотреть сообщение
karat39, начни со статического анализа. cpp-check хотя бы, с максимальным уровнем предупреждений. Это элементарно делается
меня уже valgrind стал удивлять возможностями.
спасибо, начну с анализатора. Про него я и не подумал. Уже поставил cppcheck
0
Hikari
Хитрая блондиночка $)
1447 / 954 / 285
Регистрация: 21.12.2015
Сообщений: 3,798
27.07.2016, 19:54 #15
Цитата Сообщение от karat39 Посмотреть сообщение
в одном участке кода все работает, и допустим через N строчек кода, такой же вызов вываливает в ошибку.
Ну еще сделать полную перестройку проекта, и видимо только пошаговкой ловить покемончика...
Иначе, как любят выражаться мои программайзеры: Дзень в сорц пока не достигнешь нирваны.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2016, 19:54
Привет! Вот еще темы с ответами:

Ошибка Access Violation при использовании vector внутри класса - C++ Builder
Проблема в следующем: имеется пользовательский класс. Три поля в классе - векторы, один из которых двумерный. Первое создание экземпляра...

Ошибка при создании класса ноты: [C++ Error] Unit1.cpp(37): E2272 Identifier expected - C++ Builder
class Nota//Класс ноты { public: char name;//Имя ноты int okt;//Номер октавы int time;//Время звучания ...

Ошибка линковки при доступе к переменным из встроенного ассемблера - Assembler
Получаю ошибку линковки для переменных port и value если закоментировать 2 и 3 строку асма то все ок void outportb(unsigned int...

AS 3.0 Ошибка при попытке доступа к переменным класса System - ActionScript
Перешел с Flash IDE на Flash Develop, сразу же столкнулся с непонятной проблемой: import flash.system.System; protected function...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
27.07.2016, 19:54
Ответ Создать тему
Опции темы

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