Server |
08-03-2007 12:20 559190 |
Работа с указателем на массив
Прошу помощи, знающих людей. В памяти размещен динамически созданный массив типа 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;
В чем проблема? Подскажите.
|
Компилятор не ругался? сейчас я буду!!!
Код:
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;
|
Время: 07:55.
© OSzone.net 2001-