Delphi - Kopiowanie dynamicznych tablic

Delphi - Kopiowanie dynamicznych tablic
T3
  • Rejestracja:ponad 13 lat
  • Ostatnio:23 dni
  • Postów:23
0

Witam.
Czy jest inny sposób na kopiowanie tablic dynamicznych niż pętlą? Wygooglowałem iż przy pomocy procedury Move można, jednak nie udało mi się to jak na razie. Oto w jaki sposób próbuję i coś nie chce wychodzić:

Kopiuj
type
  TDataStock = packed record
   Data: Pointer;
   Size: Integer;
  end;
  TDataStocks = array of TDataStock;
Kopiuj
function CopyDataStock(var From:TDataStocks):TDataStocks;
begin
 try
  SetLength(Result,High(From));
  Move(From[Low(From)],Result[Low(Result)],High(From));
 except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
 end;
end;
Kopiuj
var
 CC:TDataStocks;
begin
 CC:=CopyDataStock(DataStock);

Dodam iż próbowałem również przy użyciu CopyMemory, jednak wynik ciągle ten sam. Ani to błędu, ani przekopiowanych danych. Właściwie najlepiej byłoby dla mnie 'przenieść' dane z DataStock, do CC, bo tak czy siak po kopiowaniu mam zamiar wyczyścić tablice DataStock.

Proszę o pomoc :)

Btw, mam nadzieję, że nie wywołam jak ostatnim razem wielkiej kłótni x)

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:minuta
  • Lokalizacja:Gorlice
0

A nie powinno być ?

Kopiuj
Move(From[Low(From)],Result[Low(Result)],High(From)*sizeof(TDataStock));

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
Patryk27
Nie należy dodatkowo pomnożyć przez rozmiar tej struktury? High(From)*sizeof(TDataStock)
KA
A no właśnie przecież 3 parametr to ma być rozmiar danych a nie ilość elementów więc powinno by tak jak piszesz - poprawiłem
0

SetLength(Result,High(From));

Źle, użyj length.

Move(From[Low(From)],Result[Low(Result)],High(From));

Move(From[0],Result[0],(Length(From)-1)*sizeof(TDataStock));

0

Tfu, błąd, gadałem z ładną przyszłą programistką i byka zrobiłem. (Length(From)-1) => Length(From).

T3
  • Rejestracja:ponad 13 lat
  • Ostatnio:23 dni
  • Postów:23
0

kAzek - też mnie się tak zdawało, testowałem i nic z tego nie było :)
-123oho - nooooo.. Po raz kolejny oszczędziłeś mi nerwów :) Dzięki !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.