|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.03.2013, 15:16 | #1 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
Проблема с массивом экземпляров класса переменной длины
Всем привет!
Прошу помощи с массивом экземпляров классов переменной длины. Опишу проблему. Итак заголовочный файл: Код:
Код:
Далее при попытке записи в поле нулевого элемента массива экземпляра класса программа вываливается с ошибкой SegmentationFault: MainClass.Class[0].string4 = "test string"; --> вылетает с ошибкой доступа к памяти Если писать в string1 то иногда проходит нормально, а иногда также вылетает ошибка. Явно тут проблема с выделением или доступом к памяти. С выделением вроде все нормально. В чем проблема не могу понять. Если объявляю как SubClass Class[MAX_ARRAY_SIZE], то никаких проблем вообще не возникает. Но мне нужно динамически задавать размер массива... Большое спасибо всем откликнувшимся! Последний раз редактировалось Stilet; 25.03.2013 в 17:06. |
25.03.2013, 16:15 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
0) Оформляйте программный код тегом форума Code.
1) Не называйте типы и переменные одинаково. Запись Class = malloc(q * sizeof(SubClass)) мне пришлось осознавать секунд двадцать. 2) MainClass.Class - бессмысленное выражение. Оператор доступа к члену '.' неприменим к имени типа. Компилятор должен был выдать ошибку. Раз он у Вас её не выдал, что-то сильно не так. Приведите контекст, в котором используете строку MainClass.Class[0].string4. 3) Есть malloc - должен быть free. Железное правило. Даже теоретически не вижу в Вашем коде, где он мог бы быть. |
25.03.2013, 16:53 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
В догонку - не используйте malloc/free для классов - для этого есть new/delete.
Я не знаю, что у вас string, но если это класс и память выделяете через malloc, то тогда у string не срабатывают конструкторы, ну и далее при доступе к string переменным все ломается ибо в них "мусор". |
25.03.2013, 20:51 | #4 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
Спасибо за ваши замечания!
Насчет доступа к члену класса я конечно ошибся когда упрощал код - в main.cpp определяется экземпляр и уже к его членам осуществляется доступ: Код:
А почему при malloc() для string не срабатывают конструкторы? Это точно так? Где про это можно почитать? |
26.03.2013, 12:13 | #5 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
26.03.2013, 13:00 | #6 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
Понятно
Спасибо большое! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача в Delphi:Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов | Nyasha | Помощь студентам | 1 | 08.11.2012 08:28 |
массив экземпляров класса | flibustier912 | Visual C++ | 1 | 05.05.2012 01:00 |
Создание экземпляров класса | MuradS60 | Общие вопросы C/C++ | 1 | 01.04.2012 18:21 |
Копирование экземпляров класса | 3D Hunter | Общие вопросы Delphi | 14 | 29.08.2011 12:46 |
2-мерный динамический массив экземпляров класса. С++ | Парсифаль | Общие вопросы C/C++ | 1 | 29.12.2009 14:35 |