Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с указателем на массив (http://forum.oszone.net/showthread.php?t=80556)

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;

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

pva 09-03-2007 19:16 559695

Компилятор не ругался? сейчас я буду!!!
Код:

  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.

Время: 07:55.
© OSzone.net 2001-