|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.03.2017, 16:37 | #1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Array of Record - как удалить элемент
Здравствуйте.
Задумался вот над какой проблемой. Создаю безразмерный массив из записей. Возникает необходимость удалить последний. Уменьшение размера массива на 1, как я вычитывал, не убирает последний элемент из памяти. Приравняв к нулю всё, хранящееся в записи, саму запись я же этим не уничтожу, наверное? Как избавиться от ненужной записи в массиве? |
31.03.2017, 16:53 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
что-то вы странное рассказываете.
покажите свой код объявления переменных/данных и код заполнения массива. после этого будет повод для предметного разговора. |
31.03.2017, 19:59 | #3 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
To truncate a dynamic array, pass it to SetLength, Вот если у вас были не записи, а указателе или классы то их возможно надо было бы освободить вручную до того как изменять размер массива.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
31.03.2017, 20:09 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ну в общем то если в записях не простые типы данных, а указатели, то их тоже нужно освобождать перед SetLength и обязательно, а не возможно, иначе утечки. А сами записи SetLength освободит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
02.04.2017, 01:37 | #5 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Если при добавлении нового элемента массива выделялась память под его внутренние данные, то при удалении этого элемента из массива естественно эту память нужно освободить. Самому, ручками.
|
03.04.2017, 14:15 | #6 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Всем большое спасибо за пояснения! Нет, данные у меня в записи простые: строки да числа, но я подумал вдруг, что сама запись - не простой элемент.
|
03.04.2017, 14:32 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Проще использовать готовые коллекции вместо своих велосипедов с массивами.
TObjectList, TList, ... Generic (TObjectList<TMyClass>) если 2009+
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
04.04.2017, 11:51 | #8 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Хм... TList, вроде, подошёл бы. Но я программирую только для своих мелких "бытовых" нужд и практически не сталкивался с необходимостью объектов или чего-то ещё, для чего необходимо "Create". И как-то побаиваюсь его... Особенно, если он соседствует с указателями. Единственное, где я использую "Create" - это TStringList, т.к. он мной используется очень часто и является очень простым в создании. Ничего кроме "Create" ему не нужно, и всё, что нужно запомнить - это что в конце его нужно удалить через Free.
Может, есть что-то понятное и полезное для того, кто не сталкивался с применением конструкторов, на русском по работе с TList? Даже в delphibasics какая-то перегрузка в примере с классами и конструкторами в примере. |
04.04.2017, 11:56 | #9 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Да, в Дельфи неудобно с Free, в С++ хотя бы есть smart-указатели или просто разрушение объектов на стеке (без new) при выходе из области видимости )
А про указатели, если 2009+, то в TList вроде уже не надо с ними париться для просто чисел и т.п. http://docwiki.embarcadero.com/CodeE...TList_(Delphi) Для классов и записей вроде в любом случае нужны указатели если вы хотите освобождать память (проще класс, тогда просто Create и Free). TObjectList умеет сам вызывать Free при удалении элемента (если стоит флаг об этом). http://docs.embarcadero.com/products...bjectList.html До 2009 все так же, только без дженериков и надо кастовать к нужному типу при доступе Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 04.04.2017 в 12:22. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С,С++, как удалить элемент списка? | Алексей_2012 | Помощь студентам | 5 | 11.06.2015 10:38 |
как удалить n-ый элемент вектора? | Tiva | Помощь студентам | 1 | 09.11.2012 20:28 |
Как удалить элемент массива? | БалаШагаЛ | PHP | 1 | 28.01.2012 20:46 |
Как удалить(добавить) элемент массива? | vanek1 | Помощь студентам | 3 | 15.12.2010 22:26 |
Сложная структура записи (record+array) | Alex Cones | Общие вопросы Delphi | 20 | 20.10.2009 19:10 |