Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.10;
Скачать: CL | DM;

Вниз

Программа вылетает, если переменная принадлежит классу.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-1252018584
voyager
2009-09-04 02:56
2011.04.10
Возврат значения из программы


15-1293223383
Stenfit
2010-12-24 23:43
2011.04.10
перевод


2-1294720735
DROWSY
2011-01-11 07:38
2011.04.10
Как в ячейке грида выводить текст, если значение поля


2-1294726595
RUu
2011-01-11 09:16
2011.04.10
оповещение первой формы о закрытии второй


2-1294822487
Sam86
2011-01-12 11:54
2011.04.10
Получение информации о функции по ее адресу