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

Странный SIGSEGV, или что зависит от порядка написания интерфейса класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ описание класса определённого типа http://www.cyberforum.ru/cpp-beginners/thread106652.html
Доброго времени суток!!! Могули я описать класс определённого типа данных, например чтобы потом была возможна конструкция: MyClass object; int a = 1; object = a; Заранее спасибо!!!
C++ матрица помогите решить,пожалуйста... _________________________ дана действительная квадратная матрица С(n,n). найти максимальный элемент в главной диагонали и поменять местами соответствующие ему строку и столбец ______________________ заранее спасибо большое http://www.cyberforum.ru/cpp-beginners/thread106642.html
Функция fopen возвращает нулевой указатель (Visual Studio) C++
Здраствуйте) У меня возникла очень странная проблема.просто мистика. С чем может быть связано возвращение нулевого указателя в функции fopen.? Я пишу в винАПИ.По пока с новыми функциями не разобрался(для работы с файлами) Вот.И тут такое.Путь задан жестко.НО!она открывает его ИНОГДА, а чаще всего НУЛЛ возвращяет.Путь правильный.Потому,что по тому же пути из этого же фаила считывает инфу...
C++ найти max и min по длине слово
такая задача. помогите плиз _______________________________ дана строка символов. найти в ней max и min по длине слово и заменить их на подстроки "max" и "min" соответственно, при необходимости сдвинув символы ___ заранее спасибо
C++ передача в функцию http://www.cyberforum.ru/cpp-beginners/thread106631.html
Здрасти. ifstream in("1.txt"); что возвращает in? как передать этот поток (in) в функцию которая выводит символы? void readFile( ???????????? ){ char ch; while (in){
C++ В каждой строке двухмерного массива определить наибольший элемент и подсчитать сумму этих максимальных элементов В каждой строке двухмерного массива определить наибольший элемент и подсчитать сумму этих максимальных элементов. подробнее

Показать сообщение отдельно
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
19.03.2010, 23:04     Странный SIGSEGV, или что зависит от порядка написания интерфейса класса
Есть некий класс,и в нем в секции private записано следующее:
C++
1
2
3
4
5
6
7
8
       private:
           Value *val;
           Types var_type;
           bool is_initialized;
           bool is_shared;
           string var_name;
           var_Arr_t *page; // In which page variable located.
       public:
Я не знаю,важно ли это,но в конструкторах это:
конструкторы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  Variable::Variable (const string name):val(NULL)
  {
     var_name = name;
     is_initialized = false;// The default
     is_shared      = false;// The default
  }
/* -------------------------------------------------------------------------- */
  Variable::Variable (const string name,Types type):val(NULL)
  {
     var_name = name;
     var_type = type;
     is_initialized = false;// The default
     is_shared      = false;// The default
  }
/* -------------------------------------------------------------------------- */
  Variable::Variable (const string name,Value *value)
  {
     var_name = name;
     val = value;
     is_initialized = false;// The default
     is_shared      = false;// The default
  }

И всё работает. Но если поменять так:
C++
1
2
3
4
5
6
7
8
       private:
           Value *val;
           bool is_initialized;
           bool is_shared;
           string var_name;
           Types var_type;
           var_Arr_t *page; // In which page variable located.
       public:
,то есть просто передвинуть переменную enum Types var_type; немного вниз,больше ничего не трогая,и перекомпилировать прогу,а потом запустить,то программа вылетает с Segmentation fault.
Для справки скажу,что я обнаружил это странное поведение,когда пытался сделать конструкторы со значениями по умолчанию так:
C++
1
2
3
4
5
6
7
/* -------------------------------------------------------------------------- */
  Variable::Variable (const string name):val(NULL),var_name(name),
     is_initialized(false),// The default
     is_shared(false)// The default
  {
 
  }
на что получил странные предупреждения от gcc:
Код
/home/user/Interpreter/Interpreter/intermediate/variable.h||In constructor ‘Variable::Variable(std::string)’:|
/home/user/Interpreter/Interpreter/intermediate/variable.h|52|warning: ‘Variable::var_name’ will be initialized after|
/home/user/Interpreter/Interpreter/intermediate/variable.h|50|warning:   ‘bool Variable::is_initialized’|
/home/user/Interpreter/Interpreter/intermediate/variable.cpp|42|warning:   when initialized here|
||=== Build finished: 0 errors, 3 warnings ===|
- поменял в интерфейсе их местами - предупреждения пропали. Потом передвинул enum Types var_type; - появился Segfault.
Хотя бы теоретически,отчего такое может быть? Есть ли какие-то ограничения при работе с контейнерами,указателями и памятью на порядок переменных в интерфейсе класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru