Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
ВнизПрограмма вылетает, если переменная принадлежит классу. Найти похожие ветки
← →
User (2011-01-10 14:30) [0]Вот исходный код:
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);
В чём здесь ошибка?
← →
DiamondShark © (2011-01-10 14:34) [1]
> В чём здесь ошибка?
В ДНК.
> RND.Create;
RND := TRND.Create;
← →
User (2011-01-10 14:36) [2]>RND := TRND.Create;
Спасибо!
← →
Amoeba_ (2011-01-10 23:19) [3]И негоже писАть такое:
> Destructor Free;
Корректно будет:
destructor Destroy; override;
P.S. Учите матчасть.
← →
Юрий Зотов © (2011-01-10 23:48) [4]И еще: судя по коду, объект должен существовать в программе в единственном экземпляре - так почему бы не сделать его синглтоном (например, перекрыв методы NewInstance и FreeInstance). Дел на 2 минуты, а надежность программы повысится.
← →
DiamondShark © (2011-01-11 13:23) [5]
> а надежность программы повысится.
Юрий Зотов -- неисправимый оптимист!
← →
Anatoly Podgoretsky © (2011-01-11 13:47) [6]
> Юрий Зотов © (10.01.11 23:48) [4]
Тогда вообще придется крест на программе ставить.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c