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

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

04.02.2011, 16:36. Показов 1654. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru