Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Не уничтожается класс с 0 индексом   Найти похожие ветки 

 
Алексей2010   (2010-02-06 19:56) [0]

Вываливается ошибка при попытки освободить экземплары класса Class2 и Class3 с индексом 0. Подскажите что я делаю неправильно?

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

type
 TClass3 = class
           private
             FParam3 : string;
           public
             property Param3 : string read FParam3 write FParam3;
             constructor Create;
             destructor  Destroy;
           end;

 TClass2 = class
           private
             FParam2 : string;
             FSize3  : word;
             FClass3 : array of TClass3;
             procedure SetClass3 (Index : word; AClass3 : TClass3);
             function  GetClass3 (Index: word) : TClass3;
             procedure SetSize3 (ASize3 : word);
           public
             property Param2 : string read FParam2 write FParam2;
             property Class3 [Index : word] : TClass3 read GetClass3 write SetClass3;
             property Size3 : word read FSize3 write SetSize3;
             constructor Create;
             destructor  Destroy;
          end;

 TClass1 = class
           private
             FSize2  : word;
             FClass2 : array of TClass2;
             procedure SetClass2 (Index : word; AClass2 : TClass2);
             function  GetClass2 (Index: word) : TClass2;
             procedure SetSize2 (ASize2 : word);
           public
             property Class2 [Index : word] : TClass2 read GetClass2 write SetClass2;
             property Size2 : word read FSize2 write SetSize2;
             constructor Create;
             destructor  Destroy;
          end;

implementation
////////////////////////////////////////////////////////
//TClass1
////////////////////////////////////////////////////////
procedure TClass1.SetClass2 (Index : word; AClass2 : TClass2);
begin
 FClass2 [Index] := AClass2;
end;

//-----------------------------------------------------
function TClass1.GetClass2 (Index: word) : TClass2;
begin
 Result := FClass2 [Index];
end;

//-----------------------------------------------------
procedure TClass1.SetSize2 (ASize2 : word);
var
 I : word;
begin

 if FSize2 <> 0 then    // &#229;&#241;&#235;&#232; &#237;&#229; &#239;&#229;&#240;&#226;&#251;&#233; &#226;&#251;&#231;&#238;&#226;
 for I := 0 to Size2 do // &#238;&#241;&#226;&#238;&#225;&#238;&#230;&#228;&#224;&#229;&#236; &#239;&#224;&#236;&#255;&#242;&#252;
   FreeAndNil (FClass2 [I]); // ERROR EROOR &#206;&#216;&#200;&#193;&#202;&#192;, &#237;&#229; &#238;&#241;&#226;&#238;&#225;&#238;&#230;&#228;&#224;&#229;&#242;&#241;&#255; &#238;&#225;&#250;&#229;&#234;&#242; &#241; &#232;&#237;&#228;&#229;&#234;&#241;&#238;&#236; 0

// &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#236;&#224;&#241;&#241;&#232;&#226; &#232; &#238;&#225;&#250;&#229;&#234;&#242;&#251; Class2
 FSize2 := ASize2;
 SetLength (FClass2, Size2);
 for I := 0 to Size2 do
   FClass2 [I] := TClass2.Create;

end;

//-----------------------------------------------------
constructor TClass1.Create;
begin
end;

//-----------------------------------------------------
destructor  TClass1.Destroy;
var
 I : word;
begin
 for I := 0 to Size2 do
   FreeAndNil (FClass2 [I]);
end;

////////////////////////////////////////////////////////
//TC2
////////////////////////////////////////////////////////
procedure TClass2.SetClass3 (Index : word; AClass3 : TClass3);
begin
 FClass3 [Index] := AClass3;
end;

//-----------------------------------------------------
function TClass2.GetClass3 (Index: word) : TClass3;
begin
 Result := FClass3 [Index];
end;

//-----------------------------------------------------
procedure TClass2.SetSize3 (ASize3 : word);
var
 I : word;
begin

 if FSize3 <> 0 then    // &#229;&#241;&#235;&#232; &#237;&#229; &#239;&#229;&#240;&#226;&#251;&#233; &#226;&#251;&#231;&#238;&#226;
 for I := 0 to Size3 do // &#238;&#241;&#226;&#238;&#225;&#238;&#230;&#228;&#224;&#229;&#236; &#239;&#224;&#236;&#255;&#242;&#252;
   FreeAndNil (FClass3 [I]); // ERROR EROOR &#206;&#216;&#200;&#193;&#202;&#192;, &#237;&#229; &#238;&#241;&#226;&#238;&#225;&#238;&#230;&#228;&#224;&#229;&#242;&#241;&#255; &#238;&#225;&#250;&#229;&#234;&#242; &#241; &#232;&#237;&#228;&#229;&#234;&#241;&#238;&#236; 0

// &#241;&#238;&#231;&#228;&#224;&#229;&#236; &#236;&#224;&#241;&#241;&#232;&#226; &#232; &#238;&#225;&#250;&#229;&#234;&#242;&#251; Class2
 FSize3 := ASize3;
 SetLength (FClass3, Size3);
 for I := 0 to Size3 do
   FClass3 [I] := TClass3.Create;

end;

//-----------------------------------------------------
constructor TClass2.Create;
begin
end;

//-----------------------------------------------------
destructor  TClass2.Destroy;
begin
end;

////////////////////////////////////////////////////////
//TC3
////////////////////////////////////////////////////////
constructor TClass3.Create;
begin
end;

//-----------------------------------------------------
destructor  TClass3.Destroy;
begin
end;


 
oldman ©   (2010-02-06 20:03) [1]

Кажется ты вываливаешься за границы массива.
Если FSize равно, предположим, шести, у тебя в массиве шесть элементов?
А For i: to FSize подразумевает 7.


 
oldman ©   (2010-02-06 20:07) [2]

И что-то у меня сомнения насчет FretAndNil массива поэлементно с головы...


 
KilkennyCat ©   (2010-02-06 21:23) [3]


> oldman ©   (06.02.10 20:07) [2]

он же не элементы массива грохает, а содержимое, так что без разницы откуда.


 
Anatoly Podgoretsky ©   (2010-02-06 22:50) [4]

downto
А что за бардак с пустыми Create и Destroy


 
Демо ©   (2010-02-06 23:46) [5]


> Алексей2010   (06.02.10 19:56) 


А где пример использования?


 
Игорь Шевченко ©   (2010-02-06 23:47) [6]


> Подскажите что я делаю неправильно?


Все.

По пунктам:
не говоришь, что за ошибка.
вываливаешь огромный код с комментариями на непонятном языке
просишь незнакомых людей поработать визуальными отладчиками

читай и воздастся тебе:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
Алексей2010   (2010-02-07 10:01) [7]

Удалено модератором


 
oldman ©   (2010-02-07 10:24) [8]

Из текста программы неясно, что хранится в переменных Size2, Size3 и Index при вызове функций.

А вот это:

> procedure TClass1.SetClass2 (Index : word; AClass2 : TClass2);
> begin
>  FClass2 [Index] := AClass2;
> end;

Зачем было оформлять процедурой?
Посылать два параметра, чтоб один присвоить другому...


 
sniknik ©   (2010-02-07 10:29) [9]

> а нафига тогда вообще эта конференция?
ну явно не для дебага дурного кода... или отгадывания места ошибки и что за ошибка...

одна из целей в наставлении начинающих... на то чтоб им начать думать самим, на то чтоб обдумывать вопрос, а не просто "бухать как есть, не пойми что,  и ждать конкретного ответа" (это фантастика сынок...), но то чтобы вопрос действительно был вопросом, а не кодом для дебагера (который на куске работать как раз и не будет...), но то чтобы вопросы были грамотными (см ссылку)...
вообще, как кто то сказал, вопрос должен содержать половину ответа иначе это не вопрос (ну или что то типа, не дословно в общем). и если бы ты хотя бы попытался составить правильный вопрос. то возможно сам нашел бы ответ...

> спасибо за помощь
пожалуйста. и что бы ты там не думал это действительно помощь. (чувствуется сарказм в твоем спасибо...)



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

Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.076 c
6-1224492954
Mephala
2008-10-20 12:55
2010.08.27
Сформировать soap-сообщение с base64binary


15-1270198375
Девелопер
2010-04-02 12:52
2010.08.27
WMware WorkStation - невозможно работать по сети с хост-машиной.


15-1270672202
Юрий
2010-04-08 00:30
2010.08.27
С днем рождения ! 8 апреля 2010 четверг


15-1274405740
Дмитрий С
2010-05-21 05:35
2010.08.27
Мост в Волгограде


9-1181152411
CMOS
2007-06-06 21:53
2010.08.27
Новый Asphyre 4.0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский