Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TLIST [D6, Win95/98]


c0pYc@t ©   (2002-08-05 09:39:00) 

Читаю книгу, а там примерчик

var
List: TList;
Item: Pointer;
Value: Integer;
........

List := TList.Create;
Item := New(Value); //Ошибка здесь
List.Add(Item);
List.Remove(Item);
Dispose(Item);
List.Free;

Подскажите что здесь не так?


c0pYc@t   (2002-08-05 12:33:00) [1]

спасибо, глупые ошибки допускаю :(


Виктор Щербаков   (2002-08-05 10:48:00) [2]


> Item^ := 10;

Что же ты делаешь? Указатель-то не инициализирован!
Вернее инициализирован nil"ом. А обращение к памяти по этому адресу приводит к AV!


MBo   (2002-08-05 10:47:00) [3]

>Item^ := 10;
>New(Item);

наоборот!

New(Item);
Item^ := 10;
List.Add(Item);
showmessage(inttostr(PInteger(list.Items[i])));


c0pYc@t   (2002-08-05 10:26:00) [4]

чего то я совсем с памятью запутался

вот код

unit Unit1;

interface

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

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
List: TList;
Item: ^Integer;


implementation

{$R *.dfm}

begin
List := TList.Create;
Item^ := 10;
New(Item);
List.Add(Item);
{
showmessage(inttostr(list.Items[0])); как мне теперь добраться до элемента?
}
List.Remove(Item);
Dispose(Item);
List.Free;

end.


MBo   (2002-08-05 10:03:00) [5]

>Lord Warlock
локальная переменная value исчезает при выходе их проц., куда указывает Item?
здесь, конечно, и список локальный, но все же...


Юрий Зотов   (2002-08-05 09:55:00) [6]

Странно. Раньше за Фароновым такого не замечалось. Надеюсь, просто случайная опечатка.


Lord Warlock   (2002-08-05 09:53:00) [7]

Гм, придумалась извращенческая конструкция:

var List: TList;
Item: Pointer;
Value: Integer;
begin
List:=TList.Create;
Value:=10;
Item:=@Value;
List.Add(Item);
ShowMessage(IntToStr(Integer(List.Items[0]^)));
List.Remove(Item);
List.Free;
end;

Просьба покритиковать.


c0pYc@t   (2002-08-05 09:49:00) [8]

В В Фаронов Delphi6


Юрий Зотов   (2002-08-05 09:47:00) [9]

var
List: TList;
Item: ^Integer; //!!!
........

List := TList.Create;
New(Item); // !!!
List.Add(Item);
List.Remove(Item);
Dispose(Item);
List.Free;

Детали см в справке (New procedure)

P.S. Это кто ж такие книжки пишет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо