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

C++

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

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

27.07.2016, 17:02. Просмотров 498. Ответов 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
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
27.07.2016, 20:14 #16
Купи PVS-Studio, раз не можешь показать код.
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 122
27.07.2016, 20:35  [ТС] #17
Цитата Сообщение от castaway Посмотреть сообщение
Купи PVS-Studio, раз не можешь показать код.
стоит trial. Но в нем есть проблема. Приходится переделывать исходники под кроссплотформенность, чтобы он их закомпилил, а это бывает не очень быстро.
cppcheck смотрю делает тоже самое. Я уже даже все warning'и устранил на всякий случай

Добавлено через 1 минуту
Цитата Сообщение от Hikari Посмотреть сообщение
Ну еще сделать полную перестройку проекта, и видимо только пошаговкой ловить покемончика...
Иначе, как любят выражаться мои программайзеры: Дзень в сорц пока не достигнешь нирваны.
ну если valgrind не выручит, придется откатывать на более старую версию и переделывать по кусочкам действительно.
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
27.07.2016, 20:48 #18
Ну тогда проверяй код "на глаз", скорее всего где-то выходишь за пределы доступной (выделенной) памяти.
0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 122
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 слетели в никуда. Отсюда послетали все объекты классе.
0
DrOffset
27.07.2016, 21:33
  #20

Не по теме:

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



Не по теме:

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

0
karat39
4 / 4 / 1
Регистрация: 09.02.2016
Сообщений: 122
27.07.2016, 21:35  [ТС] #21
Цитата Сообщение от DrOffset Посмотреть сообщение
Это как раз и называется "в память пострелял".
буду знать, а то стеснялся спросить =)
0
27.07.2016, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2016, 21:35
Привет! Вот еще темы с ответами:

Ошибка 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...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

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