Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции очистки массива 
:(
    Опции темы
NiJazz
  Дата 6.2.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Есть у меня несколько массивов string'ов, нужно их почистить. Понятно, что можно циклом просто обнулить значения. А есть ли в Delphi функции для очистки массивов? В Си, кажись, memset и др. (так просто не вспомню).
PM MAIL   Вверх
remax
Дата 6.2.2004, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



setlength(имя динамического массива или строковой переменной,0)


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
remax
Дата 6.2.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



Да, самое важное. Если, например, s:string; то выполнение s:=''; не приводит к освобождению занимаемой памяти!



--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
NiJazz
Дата 6.2.2004, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



remax, массив не динамический (и не должен быть!!!).

Цитата
Да, самое важное. Если, например, s:string; то выполнение s:=''; не приводит к освобождению занимаемой памяти!

Вот так я и не хочу делать в цикле. У меня массивы строк.
PM MAIL   Вверх
remax
Дата 6.2.2004, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



Цитата(NiJazz @ 6.2.2004, 10:24)
массив не динамический (и не должен быть!!!).


Почему?

Цитата

var
  ar:array of string;
  s:string;
begin
  setlength(ar,100);      // Заказали 100 элементов  (0..99)
  ar[25]:='12fkjfsjfjfjsd';// Присвоили 26 элементу
  s:=ar[25];
  setlength(ar,0);  // Освободили занимаемую память
end;

Что здесь плохого?


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
NiJazz
Дата 6.2.2004, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
Почему?

Работа идёт с типизированными файлами, а там динамические массивы использовать нельзя.

PM MAIL   Вверх
Paradox
Дата 6.2.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Цитата
выполнение s:=''; не приводит к освобождению занимаемой памяти
судя по хелпу string занимает столько памяти, сколько необходимо в каждый конкретный момент (от 2 байт до 1 гигабайт по-моему)


--------------------
---
PM MAIL WWW   Вверх
NiJazz
Дата 6.2.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Paradox, скорее так и есть. Это ж есть массив char-ов, след-но если
Код

var s: string[255]
     ss: integer;
begin
s := '';
ss := sizeof(s);
end;

то ss выдаст 255 байт.
Поэтому присваивание пустого значения память не освобождает.
Но мне нужно почистить не для освобождения памяти...

PM MAIL   Вверх
NiJazz
Дата 6.2.2004, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Даже не 255, а 256 байт.
PM MAIL   Вверх
Полудненко Олег
Дата 6.2.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Українець
**


Профиль
Группа: Участник...
Сообщений: 556
Регистрация: 13.8.2003

Репутация: 1
Всего: -11



FillChar(ar,Sizeof(ar),'')
PM MAIL   Вверх
Paradox
Дата 7.2.2004, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



NiJazz для
Код
s: string[255]
присваивание дейсвительно не освободит память
если у тебя
Код
arr:array[1..n] of string;
то
Код
arr[i]:='';
должно освободить
Но так как у тебя работа с фалами то вроятно
Код
arr:array[1..n] of string;
не встречается, просто же заполнить массив Char'ов можно так как предложил Полудненко Олег
Цитата
Но мне нужно почистить не для освобождения памяти...
а что значит почистить в твоем случае ?


--------------------
---
PM MAIL WWW   Вверх
dm9
Дата 7.2.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Цитата(NiJazz @ 6.2.2004, 15:12)
Работа идёт с типизированными файлами, а там динамические массивы использовать нельзя.

Поясни

Это сообщение отредактировал(а) dm9 - 7.2.2004, 13:10
PM MAIL ICQ   Вверх
NiJazz
Дата 7.2.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
а что значит почистить в твоем случае ?

Просто анулировать значения, чтобы глюков не было.

dm9
Цитата
Поясни

У меня есть
Код

type MyRecord = record
                             ......
                             StrArr:= array[1..10] of string[50];
                             ......
                          end;
var f: file of MyRecord;

Тут должны быть стабильные размеры строк и массивов. Если размерность не задавать, а просто array of string, то будет ошибка.

PM MAIL   Вверх
Paradox
Дата 7.2.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



NiJazz ну тогда так как Олег сказал циклом по массиву


--------------------
---
PM MAIL WWW   Вверх
NiJazz
Дата 7.2.2004, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Paradox
Так и пришлось сделать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.