Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 16:37   #1
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию выделение памяти под объект

[QUOTE=VIK_aka_TOR]приветствую...
у меня есть пару вопросов по выделению памяти под объекты классов, класс сам описываю, компилятор компилирует, но при попытке присвоить какие либо значения экземпляру класса, выскакивают ошибки памяти

Цитата:
---------------------------
Debugger Exception Notification
---------------------------
Project programmka.exe raised exception class EAccessViolation with message 'Access violation at address 00402A11 in module 'programmka.exe'. Write of address 00000004'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
насколько понимаю то это проблемы с выделением памяти под объект
Код:
  Tproduct = class    // описываем клас продукции
    Name: string[15]; // наименование продукции
    ZatrEdProd : real; // Затраты на единицу продукции
    PriseEdProd : real;  // Цена на единицу продукции
    V_Prod: array [1..4] of real;  // объем производства продукции
    A_Prod: array[1..5] of real; // объем реализованной продукции
    procedure PutName;     // процедура для записи имени продукта
    procedure PutZatrEdProd;  // процедура для записи затрат на единицу продукциии
    procedure PutPriseEdProd; // процедура для записи цены за единицу продукции
    procedure Put_V_Prod(x: integer);    // процедура для записи объема выпущеной продукции в определенный период
    procedure Put_A_prod(x: integer);   // процедура для записи реализованной продукции  в определенный период
   end;

  Tpredpr = class  // класс предприятия
    RezFin : real;   // резервные фиансовые средства
    Kredit : real;   // кредиты
    ZatrPost : real;  // постоянные затраты
    betta : real;    // налог на прибыль
    product : array [1..5] of Tproduct;
    procedure PutRezFin;  // процедура для записи резервных финансовых средств
    procedure PutKredit; // Процедура для записи кредитов
    procedure PutZatrPost;  // Процедура для записи постоянных затратов
    procedure PutBetta;   // процедура для записи налога на прибыль
  end;

var
  Vvod: TVvod; // наша ворма
  predpr : Tpredpr;  
  j,i1,i2 : integer;
create объекта вызываю при создании формы
Код:
procedure TVvod.FormCreate(Sender: TObject);
begin
   predpr := Tpredpr.Create;  // в моем понимании это выделение памяти
end;
predpr.Create; никак не описывал... кампилятор не ругается...

пример процедуры присвоения
Код:
procedure Tproduct.PutName;
  begin  // описание процедуры ввода наименования продукции
      Name := Vvod.Edit5.Text;
  end;
вызов процедуры для внесения данных
Код:
predpr.product[j].PutName;
что сделать что бы выделялась память под объект класса predpr
как то описать конструктор... или где то в другом месте вызвать predpr := Tpredpr.Create;
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 15.02.2012 в 16:46.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 15.02.2012, 17:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Посмотрите в исходниках дельфей как свойства объектов описываются, как присвоить им значения и считать их. Там же можно найти и примеры с конструкторами и деструкторами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.02.2012, 17:28   #3
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

проюзал весь свой код... установил что переменные класса predpr изменяются на ура (если не трогать вложенный класc product)
Код:
predpr.Kredit := 56;
но елси изменить переменные класса product к примеру
Код:
predpr.product[2].Name := 'ololo';
то выбивает ошибку, хотя размерность включает... эти индексы... тобишь проблема с самим изменением данных вложенного класса...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 15.02.2012, 18:18   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Объекты в массиве product не созданы. Объект Tpredpr создаете, а объекты Tproduct не надо?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.02.2012, 19:20   #5
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

ну.. не знаю правильно это или нет но :
добавил
Код:
  product : array [1..c] of Tproduct;
  predpr : Tpredpr;
  Vvod: TVvod; // наша форма
и добавил при создании формы

Код:
  predpr := Tpredpr.Create;
  for i:=1 to c do
  predpr.product[i] :=  Tproduct.Create;
покуда работает )... спасибо Аватар за своеобразные наставления... теперь запомню этот нюанс... с классом в классе... + )
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер и выделение памяти под открытие файла. KorPaEv Общие вопросы C/C++ 3 09.09.2011 12:47
Выделение памяти под массив указателей Анка291 Общие вопросы C/C++ 9 25.02.2011 00:03
выделение памяти под массив на C Kingdom_Reborn Помощь студентам 12 12.01.2011 04:40
выделение памяти под массив (си скрипт) eduard93 Общие вопросы C/C++ 0 19.12.2010 19:41
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52