Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Работа с указателем на массив

Ответить
Настройки темы
Работа с указателем на массив

Пользователь


Сообщения: 59
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Прошу помощи, знающих людей. В памяти размещен динамически созданный массив типа 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;
В чем проблема? Подскажите.

-------
Windows 2000 forever!


Отправлено: 12:20, 08-03-2007

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Компилятор не ругался? сейчас я буду!!!
Код: Выделить весь код
   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;

Отправлено: 19:16, 09-03-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Работа с указателем на массив

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Raid массив. clin Накопители (SSD, HDD, USB Flash) 7 30-11-2009 08:05
VBA - Массив. help! JaneCherry Программирование и базы данных 2 11-06-2009 06:53
Raid массив madoc Хочу все знать 1 12-02-2009 16:17
массив на PHP Surround Вебмастеру 6 15-10-2005 15:01
Из файла в массив Georgiy Вебмастеру 6 28-10-2004 23:10




 
Переход