PDA

Показать полную графическую версию : Работа с указателем на массив


Server
08-03-2007, 12:20
Прошу помощи, знающих людей. В памяти размещен динамически созданный массив типа array of array of single. В функцию размещенную в модуле Unit2.pas передается указатель на этот массив и его размеры.
Задача - переписать значения из этого массива в новый.
Проблема - невозможно присвоить адрес массива из Uni1.pas переменной Singles. Delphi ошибки не выдает, но не присваивает адрес


//Unti1.pas
LoadDataFromMem(@A,5,5);

//Unit2.pas
type
SingMas = array of array of single;

procedure LoadDataFromMem(ArrPoi: pointer; XSize, YSize: integer);
var
i, j: integer;
Singles: SingMas;
begin
Setlength(Singles, XSize, YSize);
Singles:=SingMas(ArrPoi);

Grid.RowCount:=XSize;
Grid.ColCount:=YSize;

for i:=0 to XSize-1 do
for j:=0 to YSize-1 do
Grid.Cells[i,j]:=FloatToStr(Singles[i,j]);
end;


В чем проблема? Подскажите.

pva
09-03-2007, 19:16
Компилятор не ругался? сейчас я буду!!!

Singles:=SingMas(ArrPoi); // Это что???

взяли указатель, решили, что там, где он (в стеке) расположен, на самом деле лежит какой-то массив? Если уж на то пошло:

type psingMas = ^singmas;
...
Singles:=PSingMas(ArrPoi)^;

Дальше, зачем отдельно передавать размеры массива, если они и так через указатель передаются? может вы хотели сделать так:

type
array_of_single = array of single;
parray_of_single = ^array_of_single;

procedure copyArray(parr: parray_of_single)
var
singles : array_of_single;
...
begin
singles := parr^;

for i:=Low(singles) to high(singles)
do for j:=Low(singles[i]) to high(singles[i])
do ...
end;




© OSzone.net 2001-2012