Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Динамическое создание обьектов в потоке


Автор: s-r 29.8.2007, 17:02
Создан потомок обьекта TThread -> TRain

Код

TMy=class
  end;

procedure TRain.Execute;
var
  my:^TMy;

begin
while not Terminated do
  begin
      new(my);                     // ???
    
  end;
end;


память выделяется, но при закрытии приложени Access violation at address 0000000000...
как решить проблему?


M
Alexeis
Модератор: используйте подсветку кода http://forum.vingrad.ru/index.php?show_typ...howtopic=126445

Автор: EvilsInterrupt 29.8.2007, 17:19
s-r, А TMy это чей сын? От TObject или просто класс?

Автор: Alexeis 29.8.2007, 17:29
Что-то пахнет паскалем smile . В делфи объекты создаются так 

Код

TMy=class

  end;
procedure TRain.Execute;
var
  my : TMy;
begin
while not Terminated do
  begin
      my := TMy.Create  ;                 // ???
    
  end;
end;


Добавлено @ 17:31
EvilsInterrupt, а разве в делфи класс может быть не наследником TObject ?

Автор: lukas 29.8.2007, 17:57
объект уже ссылка... а у тебя выходит что ссылка ссылается на другую ссылку, которая ссылается на класс... У любого объекта должен быть конструктор... помимо всего остального... это же не просто ссылка...

Автор: EvilsInterrupt 29.8.2007, 19:00
Цитата

а разве в делфи класс может быть не наследником TObject ?


А почему нет? Что мешает?

Как правило в дельфи-проектах класс создают так:
TMyClass = Class(тута родители или интерфейсы)

или же:

TMyClas2 = class

Что автоматически получаем хотя бы одного папу TObject.

Но есть возможность, создания и не от TObject

Автор: MetalFan 29.8.2007, 20:13
Цитата(EvilsInterrupt @  29.8.2007,  19:00 Найти цитируемый пост)
Но есть возможность, создания и не от TObject

ого! а в CodeGear то и не знают!

Автор: Alexeis 29.8.2007, 20:44
EvilsInterrupt, ни разу не слышал...

Автор: EvilsInterrupt 29.8.2007, 20:52
Alexeis, может я и туплю, но кажется это:
Код

  TMyClass = object

  end;

оставлено для обратной совместимости.

Компилется, что говорит о том что классы как они создавались в турбо паскале, не вымерли и вполне их можно применить ;)

То что RTTI нет , это уже другое! Но класс не от TObject возможен же ?! )))

Автор: Sanchezzz 29.8.2007, 20:57
Код

type
  Tmy:=(TRain)
  procedure Execute;
// ....
end;

procedure TRain.Execute;
var
  my : TMy;
begin
while not Terminated do
  begin
      my := TMy.Create;    
  end;
end;

Автор: Snowy 29.8.2007, 21:07
Любой объект в конечном итоге наследуется от TObject.
Любой класс в конечном итоге наследуется от TClass.
TClass является class of TObject. То есть все инстансы класса в итоге наследники TObject.

Что касается данного вопроса - приведённая информация не имеет отношения к проблеме.
Из этого ответ: Недостаточно информации. Проблема не в этом коде. Ошибка в другом месте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)