Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8

Выделением памяти под переменные собственного класса

04.02.2011, 16:36. Показов 1677. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю указатель собственного типа, выделяю память - ошибка "Write to Adress 0x00000"
По коду:
C++
1
2
MyClass* pMyClass;
pMyClass=new MyClass[i];
Класс элементарный на 4 разнотипных атрибута под 'protected'.
На 90% уверен что проблема в конструкторе. Он у меня ничего не заполняет, пустой.
Кто в теме - подскажите
Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2011, 16:36
Ответы с готовыми решениями:

Проблема с выделением памяти под строку
Собственно задание: Написать функцию, удаления подстроки в строке. Функция принимает исходную строку и подстроку для поиска. С помощью...

Проблема с выделением памяти под массив
Здравствуйте, пишу программку и возникла проблема с выделением памяти с помощью функции malloc (). При компеляции выдает ошибку conflicting...

Шаблонный класс. Создание экземпляра класса с динамическим выделением памяти
Вопрос Как задать экземпляра шаблонного класса с динамическим выделением памяти.Можно с примером)

13
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 17:18
Откуда берется i
C++
1
pMyClass=new MyClass[i];
? может
C++
1
pMyClass[i]=new MyClass(this);
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
04.02.2011, 17:20  [ТС]
переменная типа int, в которой хранится нужное количество элементов массива.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 17:22
C++
1
pMyClass=new MyClass[i];
- а можно своими словами - что вы этим хотите сделать ?
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
04.02.2011, 17:33  [ТС]
хочу выделить память под массив с і элементов типа MyClass
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 17:44
а вот так не пробовали ?
C++
1
pMyClass[i]=new MyClass(this);
Добавлено через 1 минуту
Вы хотите сделать несколько (i) экземпляров своего класса , или указателей на свой класс ?
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
04.02.2011, 17:55  [ТС]
экземпляров. обычный массив, самый что не есть обычный) просто заранее не известно количество элементов в массиве, потому приходится делать так.

Добавлено через 3 минуты
пытался и так сделать:
C++
1
MyClass* pMyClass=(MyClass*)calloc(i,sizeof(MyClass));
и через маллок тоже проборал, каждый раз одна и та же ошибка.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 18:06
Давайте рассмотри на конкретном примере - я не знаю, что делает Ваш класс (писал "на коленке", так что могут быть ошибки в синтаксисе)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
.H
class TDynLabel : public TLabel
{
__published:  // IDE-managed Components
private: // User declarations
public:   // User declarations
  __fastcall TDynLabel(TComponent* Owner);
};
// .CPP
__fastcall TDynLabel::TDynLabel(TComponent* Owner): TLabel(Owner)
{
  Align = alNone; // или TDynLabel::Align = alNone;
  Visible = true;
  Top = 0;
  Left = 0;
  Height = 16;
  Left = 10;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (int i = 0; i = 5; i++) {
    TDynLabel *lbl = new TDynLabel(this);
    lbl[i]->Top = lbl[i]->Top+lbl[i]->Height;
    lbl[i]->Caption = "Метка"+IntToStr(i);
  }     
}
// Если количество не известно,
// все же можно найти какое-нибудь условие, например
void __fastcall TForm1::WndProc(TMessage &message)
{
  if(message.Msg == WM_PAINT) { // или WM_MOUSEMOVE, или WM_KEYUP
    TDynLabel *lbl = new TDynLabel(this);
    lbl->Top = lbl->Top+16;
    lbl->Caption = "Метка";
  }
  WndProc->Dispatch(&message);
}
1
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
04.02.2011, 18:13  [ТС]
// Если количество не известно,
// все же можно найти какое-нибудь условие, например
условие есть, и количество я в ходе выполнения программы получаю, проблема не в этом, в твоём примере выделяется память под каждую отдельную переменную в ходе итерации, и это бы мне тоже подошло, но даже если я выделяю не массив, а одну переменную, типо:
C++
1
pMyClass=new MyClass;
всё-равно вылетает та же ошибка.
когда работаю таким же способом с переменными фундаментальных типов, всё работает нормально, потому проблему компилятора я откинул.
остаётся одно - конструктор.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.02.2011, 18:22
конструктор - это что и где ?
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
06.02.2011, 01:26  [ТС]
при создании класса нужно написать конструктор, в с++ это не обязательно, при его отсутствии будет создан пустой, но вообще это по сути функция, которая вызывается при создании обьекта класса и в основном используется для инициализации атрибутов.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.02.2011, 01:28
Цитата Сообщение от LK Посмотреть сообщение
конструктор - это что и где ?
- у вас - это что и где ?
1
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
06.02.2011, 01:33  [ТС]
не совсем понял суть вопроса... у меня это в header-файле в описании класса, как метод класса описывается конструктор с таким же именем как и имя класса. у меня он пустой, инициализация переменных нулевыми значениями ничего не даёт, проблема остаётся та же.
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 8
07.02.2011, 16:01  [ТС]
просматривая код вашего примера наткнулся на непонятку:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (int i = 0; i = 5; i++) {
    TDynLabel *lbl = new TDynLabel(this);
    lbl[i]->Top = lbl[i]->Top+lbl[i]->Height;
    lbl[i]->Caption = "Метка"+IntToStr(i);
  }             
}
здесь при каждом повторе создается новый указатель lbl, как я понимаю. и еще непонятно что делает
C++
1
new TDynLabel(this)
, вызывается конструктор копий? мы создаем копию элемента?
что мне нужно - создать несколько переменных своего класса и упорядочить их в массив, чтобы я мог их вызывать по номеру, количество стаёт известно в ходе программы, тоесть я не могу задать их количество сразу в коде.
need help =\

Добавлено через 16 минут
нашол ошибку, она вообще не касается выделения памяти)
сорри за беспокойство и спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2011, 16:01
Помогаю со студенческими работами здесь

Не могу понять причину ошибки (связано с выделением динамической памяти под двумерный массив и ее удаление)
Я студент 1 курса , и выполняя задание столкнулся с проблемой. Вот само задание: Ввести оценки N учеников по K предметам. Определить и...

Выделение памяти под массив класса (конструктор класса)
Здравствуйте программисты. Не могу понять, почему при использовании объекта класса возникает ошибка. Вот код объявления массива объектов...

Выделение памяти под глобальные переменные
Кто - нибудь объясните мне не ведающему почему так: Имеется структура с таким вот содержанием: typedef struct { u8 type; u32...

Запись в собственного класса бинарный файл собственного
есть Свой тип данных дробь. Надо реализовать запись и загрузку в\из бинарного файла. #ifndef RATION_H #define RATION_H #include...

Функция не видит выделенной памяти под глобальные переменные
При решении задачи с алгоритмом поиска в глубину возникла проблема: описание переменных происходит над п/п алгоритма, выделение памяти под...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru