powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамические массивы в Delphi XE7 - XE10
25 сообщений из 48, страница 1 из 2
Динамические массивы в Delphi XE7 - XE10
    #39504529
Term
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Вот с чем столкнулся, понадобился динамический массив,
раньше размер задавал с помощью SetLength но в Delphi XE10 столкнулся с тем, что этой функции нет...

нашел вот эту статью

http://www.proghouse.ru/programming/31-delphi-xe7-array

но то что вижу там в примере,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
dynArray2: array of integer;

......................

begin

 dynArray2 := [7, 8, 9]; //Инициализация динамического массива.

end;



ну блин, так это же не динамический, это по сути тот же статический массив, только вид сбоку!
Как жить без SetLength, когда количество элементов заранее не известно???
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504533
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Term,

это шутка что ли такая? SetLength есть во всех версиях делфи, включая Tokyo. Находится в System, с динамическими массивами работает как и полагается.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504537
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Term> SetLength но в Delphi XE10 столкнулся с тем, что этой функции нет...

System.SetLength ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504540
Term
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамTerm> SetLength но в Delphi XE10 столкнулся с тем, что этой функции нет...

System.SetLength ?


да вот так сработало, странно глюк видать какойто
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504544
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "глюк"? Ошибка выдавалась какая-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504546
Term
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

сказала что не известный идетификатор, хотя в юзезах модуль был
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504550
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TermКак жить без SetLengthМежду прочим, неплохое названия для топика было бы. Люди могли бы поделиться опытом)
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504583
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Termсказала что не известный идетификатор,
Ты, скорее всего, опечетался при наборе кода в редакторе

Termхотя в юзезах модуль был
System? Ты так и пишешь, uses System ?
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39504616
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TermКак жить без SetLength
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure SetDynArrayLength(var A: Pointer; elSize, elNum: NativeInt);
var
 ti:TDynArrayTypeInfo;
begin
 ZeroMemory(@ti, sizeOf(ti));
 ti.elSize := elSize;
 DynArraySetLength(A, @ti, 1, @elNum);
end;
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506104
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TermКак жить без SetLength, когда количество элементов заранее не известно???
Использовать список TList, TObjectList или их подвиды<Generics> в новых версиях Delphi.

Ни разу не сталкивался с реальной необходимостью использовать динамические массивы.
Если только ты не пишешь какую нибудь игру и обработку видео.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506127
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BНи разу не сталкивался с реальной необходимостью использовать динамические массивы.


Открой исходники RTL/VCL, столкнись, наконец.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506426
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BНи разу не сталкивался с реальной необходимостью использовать динамические массивы.Если размер известен заранее, то массив, если нет - TList
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506427
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, это смотря что хранить
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506429
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Valery_BНи разу не сталкивался с реальной необходимостью использовать динамические массивы.
Если размер известен заранее, то массив, если нет - TList

Я бы не стал хранить типы с управляемым временем жизни в TList, а вот в динамическом массиве - стал бы.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506431
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, TList = DynArray )
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506435
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЯ бы не стал хранить типы с управляемым временем жизни в TListИмелось в виду TList<>
Bred eFeM, TList = DynArray )+ Grow
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506441
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если размер известен заранее, то массив, если нет - TList
Динамический массив потому и динамический, что не нужно знать размер заранее.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506442
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_schiЯ бы не стал хранить типы с управляемым временем жизни в TListИмелось в виду TList<>
Bred eFeM, TList = DynArray )+ Grow

Мне часто приходится иметь с дело с версиями Delphi, где нет <>
Sad but true.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506458
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyДинамический массив потому и динамический, что не нужно знать размер заранее.Нифига. Потому, что размер неизвестен на этапе компиляции

Никто не мешает писать
Код: pascal
1.
SetLength(Data, Length(Data) + 1)

но что из этого получится - сам знаешь
schiМне часто приходится иметь с дело с версиями Delphi, где нет <>Боль. Я на 2006 написал свой TList, который на Add делал GetMem, а на Delete - Finalize + FreeMem. Но там под каждый управляемый тип нужно было писать своего наследника и переопределять два метода FinalizeItem и CopyItem. Ну и Get если хотелось строгой типизации
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506462
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Я посмотрю, как вы набор байтов будете в TList хранить...
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506471
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЯ посмотрю, как вы набор байтов будете в TList хранить...Для набора байт неизвестной длины придуман TMemoryStream
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506474
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_alekcvpЯ посмотрю, как вы набор байтов будете в TList хранить...Для набора байт неизвестной длины придуман TMemoryStream

Для набора байт неизвестной длины придуман TBytes. Удобно, знаете ли.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506476
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi_Vasilisk_пропущено...
Для набора байт неизвестной длины придуман TMemoryStream

Для набора байт неизвестной длины придуман TBytes. Удобно, знаете ли.

Т.е. array of Byte.
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506479
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Нифига. Потому, что размер неизвестен на этапе компиляцииА я о чём написал?

_Vasilisk_но что из этого получится - сам знаешьНичего страшного.

_Vasilisk_Для набора байт неизвестной длины придуман TMemoryStreamДурь какая... А если мне не нужен интерфейс стрима, зачем огород-то городить?
...
Рейтинг: 0 / 0
Динамические массивы в Delphi XE7 - XE10
    #39506481
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiTBytes. Удобно, знаете ли.На любителя. Нет, конечно, если Вас не смущает постоянные реаллоки + бешеное фрагментирование памяти, то используйте, на здоровье. А если Вы скажете, что будете реаллоцировать память постранично, так Вы и получите вот это
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function TMemoryStream.Realloc(var NewCapacity: Longint): Pointer;
begin
  if (NewCapacity > 0) and (NewCapacity <> FSize) then
    NewCapacity := (NewCapacity + (MemoryDelta - 1)) and not (MemoryDelta - 1);
  Result := Memory;
  if NewCapacity <> FCapacity then
  begin
    if NewCapacity = 0 then
    begin
      FreeMem(Memory);
      Result := nil;
    end else
    begin
      if Capacity = 0 then
        GetMem(Result, NewCapacity)
      else
        ReallocMem(Result, NewCapacity);
      if Result = nil then raise EStreamError.CreateRes(@SMemoryStreamError);
    end;
  end;
end;

К слову, чуть ниже там же есть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function TBytesStream.Realloc(var NewCapacity: Longint): Pointer;
begin
  if (NewCapacity > 0) and (NewCapacity <> FSize) then
    NewCapacity := (NewCapacity + (MemoryDelta - 1)) and not (MemoryDelta - 1);
  Result := Pointer(FBytes);
  if NewCapacity <> FCapacity then
  begin
    SetLength(FBytes, NewCapacity);
    Result := Pointer(FBytes);
    if NewCapacity = 0 then
      Exit;
    if Result = nil then raise EStreamError.CreateRes(@SMemoryStreamError);
  end;
end;
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамические массивы в Delphi XE7 - XE10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]