Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Динамический массив объектов
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / Delphi & Pascal RSS подписка на сообщения с форума Subscribe


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 4894
Динамический массив объектов
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
HACK_ER




Platinum Member
# | Сообщение добавлено 11.03.2011 16:04:22
Доброго времени суток форумчанам.
Как можно сделать динамический массив объектов ( MyObjArr[] ) класса TMyClass?
 
Delphi
type TMyClass = class(TObject)
  public
    Name:string;
    SurName:string;
end;
 
var
 
MyObjArr:array of TMyClass;
 
begin
 MyObjArr[1]:=TMyClass.Create;
 ReadLn
end.
 

Приложение консольное. И, когда выполняется  
Delphi
MyObjArr[1]:=TMyClass.Create;
приложение сразу завершает свою работу без ошибок. Хотя, компилятор выдает предупреждение:
Variable 'MyObjArr' might not have been initalized
Можно ли тут обойтись без связанных списков?
 

Добавлено 11.03.2011 17:12:26 (через 1 час 8 минут 4 секунды )
 
Кажется, решил проблему, нужно воспользоваться процедурой SetLength(MyObjArr,[Число])
Сказать спасибо Ответить Цитировать






Novice
# | Сообщение добавлено 12.03.2011 23:58:45
SetLength не поможет, так как в переменной типа TMyClass(точнее не в переменной а в структуре на которую указывает эта переменная) хранится адрес на процедуру Create , а когда ты выделяешь новую память то вместо адреса на процедуру там оказывается 0 или какой то мусор
Сказать спасибо Ответить Цитировать

HACK_ER




Platinum Member
# | Сообщение добавлено 13.03.2011 00:35:16
А как тогда быть?
Сказать спасибо Ответить Цитировать

Virous




Gold Member
# | Сообщение добавлено 13.03.2011 01:19:43
  Здравствуйте.
TMyObjectArray использует только поля! Ни свойств, ни событий, ни методов. Это тут просто для наглядности или это пример из жиздни? Если последнее, то проще использовать запись.
 
Ахтунг! Собакирен мит зубен клац, клац! Зубен зи дойч!
Сказать спасибо Ответить Цитировать

HACK_ER




Platinum Member
# | Сообщение добавлено 13.03.2011 01:48:17
Это тут просто для наглядности. чтобы топик properties'aми не нагружать всякими. Я просто пишу программу, и столкнулся с такой проблемой. Класс в принципе большой, и поэтому чтобы не копировать много, я привел простой аналог.
 
Добавлено 13.03.2011 02:30:59 (через 1 час 43 минуты 42 секунды )
 
Кстати, не TMyObjectArray, а TMyClass
Сказать спасибо Ответить Цитировать

Virous




Gold Member
# | Сообщение добавлено 13.03.2011 12:45:31
Отредактировано 13.03.2011 12:53:05 by Virous
Delphi

Var MyObjectArray: Array of ^TMyClass;
    I:Integer;
Begin
  SetLength(MyObjectArray,100);
  For I:=0 to 99 do begin
    New(MyObjectArray[i]);
    MyObjectArray[i]^:=TMyClass.Create;
    End;
 
  End;
 

  А если так... Мы ведь SetLength не к массиву объектов применяем, а массиву указателей на класс.
 
Ахтунг! Собакирен мит зубен клац, клац! Зубен зи дойч!
Сказать спасибо Ответить Цитировать

HACK_ER




Platinum Member
# | Сообщение добавлено 13.03.2011 14:10:55
Спасибо, Virous. Дело в том, что в подсказке SetLength, когда вводишь высвечивается:
var S: <string or dynamic array>, NewLength: Integer
Про Pointer'ы ни слова. И вот я чисто интуитивно воспользовался
Сказать спасибо Ответить Цитировать

Virous




Gold Member
# | Сообщение добавлено 13.03.2011 16:53:07
HACK_ER

Спасибо, Virous. Дело в том, что в подсказке SetLength, когда вводишь высвечивается:
var S: <string or dynamic array>, NewLength: Integer
Про Pointer'ы ни слова. И вот я чисто интуитивно воспользовался

  Вы правы. Указатель в качестве параметра передавать нельзя, но динамический массив указателей передавать никто не запрещал.
 
Ахтунг! Собакирен мит зубен клац, клац! Зубен зи дойч!
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • Релиз ядра Linux 5.9
  • Российские хакеры вооружились уязвимостью Zerologon
  • Тысячи приватных звонков американских заключенных оказались в отк...
  • Шифровальщик атаковал немецкую компанию Software AG
  • Злоумышленники используют службу Windows Error Reporting для бесф...
  • Microsoft предупредила о вымогателях, которые выдают себя за МВД ...
  • Инфостилер Valak ворует информацию из почтовых систем Microsoft E...
  • GitLab обнаружил множество уязвимостей в исходном коде проектов с...
  • Хакеры используют службу WER в бесфайловых кибератаках
  • Ботнет HEH способен уничтожить все данные на IoT-девайсах

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Разное » Re: Помощь в скачивании платного файла
  • Взлом и безопасность / Разное » Помощь в скачивании платного файла
  • Разное / Куплю, приму в дар » куплю | ваш аккаунта | получение нового | описание внутри
  • Разное / Предложения работы » Специалиста
  • Downloads / Другое » Re: Нужна база емайл адресов юр. лиц
  • Downloads / Другое » Нужна база емайл адресов юр. лиц
  • Разное / Предложения работы » Нужен взлом mail и gmail почты
  • Взлом и безопасность / Разное » Re: Нужна помощь в скачивании файла
  • Взлом и безопасность / Разное » Нужна помощь в скачивании файла
  • Разное / Предложения работы » требуется взлом почт на постоянной основе

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}