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

Вниз

Переполнение стека при inherited Create;   Найти похожие ветки 

 
Прогер   (2006-06-26 09:05) [0]

Наследование следующее: TComponent, от него TMyClass01, от него TMyClass02, от него TMyClass03. Мои классы в свои конструкторах вызывают inherited Create(...) родителя. В программе создаётся объект класса TMyClass03. В момент Obj:= TMyClass03.Create(...) возникает переполнение стека. При отладке видно, что переполнение возникает при вызове inherited Create в классе TMyClass01. И вот понять не могу, как исправить ошибку... Уведечение памяти под стек приводит к Access Violetion в том же месте кода.


 
Palladin ©   (2006-06-26 09:10) [1]

декларацию и реализацию конструкторов в студию...


 
Юрий Зотов ©   (2006-06-26 09:10) [2]

Коструктор вызывает сам себя.

Похоже, где-то пропущено inherited и написано просто Create. Или конструктор вызывает другую процедуру, а та - снова конструктор (возможно, тоже не напрямую).


 
Прогер   (2006-06-26 09:16) [3]

В некоторых конструкторах я указывал inherited Create(AOwner, ....), а в некоторых inherited Create(Self,  ....). Когда все изменил на inherited Create(AOwner, ....) - всё заработало. Интересно, а почему так?


 
palva ©   (2006-06-26 09:37) [4]

> Интересно, а почему так?
Это зависит от того, как используются параметры конструктора, а это может сказать автор конструктора или составленная им документация.


 
Loginov Dmitry ©   (2006-06-26 11:25) [5]

> а в некоторых inherited Create(Self,  ....).


Это вообще бредовая идея. Откомпилируйте следующий код и кое-что станет ясно:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 TMyObj = class(TComponent)
 public
   constructor Create(AOwner: TComponent); override;
 end;

 TMyObj1 = class(TMyObj)
 public
   constructor Create(AOwner: TComponent); override;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TMyObj }

constructor TMyObj.Create(AOwner: TComponent);
begin
 inherited;
 Showmessage(IntToStr(Integer(Self)));
end;

constructor TMyObj1.Create(AOwner: TComponent);
begin
 inherited;
 Showmessage(IntToStr(Integer(Self)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 TMyObj1.Create(Self);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.009 c
2-1152941687
Urvin
2006-07-15 09:34
2006.08.06
Как прокрутить содержимое ListView


2-1152804322
Loginov Dmitry
2006-07-13 19:25
2006.08.06
Мастера, простенький вопросик


1-1151256672
Billis
2006-06-25 21:31
2006.08.06
Как в DBGrid узнать какая строка выделена?


6-1143200723
-FX-
2006-03-24 14:45
2006.08.06
хитрый Proxy редактирующий трафик. Это реально?


15-1151876608
Dimedrol
2006-07-03 01:43
2006.08.06
HTML: Посмотрите на ошибку - никак не осилю





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский