Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программа вылетает, если переменная принадлежит классу. [D3, 2000]


User ©   (2011-01-10 14:30:00) 

Вот исходный код:


program Project1;  {$APPTYPE CONSOLE}  {$o-}
uses Windows;

const Size = 100;

//var  PB:PByte;  //  <-- it's OK

type
 TRND = class
private
  PB:PByte; // <-- it's an ERROR
 public
  Constructor  create;
  Destructor Free;
end;

Constructor TRND.Create;
begin
 GetMem(PB,Size);  // <-- Runtime error
end;

Destructor TRND.Free;
begin
 FreeMem(PB);
end;

var RND:TRND;

begin
 RND.Create;
 readln;
 RND.Free;
end.


Если переменная PB:PByte описывается как глобальная переменная, то всё ОК, но если сделать её членом класса, то программа вылетает с ошибкой в конструкторе, где выделяется память: GetMem(PB,Size);

В чём здесь ошибка?


Anatoly Podgoretsky   (2011-01-11 13:47:00) [1]


> Юрий Зотов ©   (10.01.11 23:48) [4]

Тогда вообще придется крест на программе ставить.


DiamondShark   (2011-01-11 13:23:00) [2]


> а надежность программы повысится.

Юрий Зотов -- неисправимый оптимист!


Юрий Зотов   (2011-01-10 23:48:00) [3]

И еще: судя по коду, объект должен существовать в программе в единственном экземпляре - так почему бы не сделать его синглтоном (например, перекрыв методы NewInstance и FreeInstance). Дел на 2 минуты, а надежность программы повысится.


Amoeba_   (2011-01-10 23:19:00) [4]

И негоже писАть такое:

> Destructor Free;

Корректно будет:

destructor Destroy; override;

P.S. Учите матчасть.


User   (2011-01-10 14:36:00) [5]

>RND := TRND.Create;

Спасибо!


DiamondShark   (2011-01-10 14:34:00) [6]


> В чём здесь ошибка?

В ДНК.


>  RND.Create;

RND := TRND.Create;


Наверх

Титульная страница Поиск, карта сайта Написать письмо