![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программа вылетает, если переменная принадлежит классу. [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;