![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что-то я с поинтерами запутался... [D6, Win2k]
МИФИст © (2002-06-07 15:00:00)Помогите кто чем может =)
У меня есть процедура
procedure Decoder(Data: Pointer; RecvBytes: Word);
в которую моя программа часто "забегает"
мне нужно в этой процедуре заполнять массивы
ArrPointer: array[0..4999] of Pointer;
ArrBuffer: array[0..4999] of PChar;
ArrLength: array[0..4999] of Word;
я в процедуре делаю так
ArrPointer[i]:=@Data;
ArrLength[i]:=RecvBytes;
CopyMemory(@ArrBuffer[i],@ArrPointer[i],ArrLength[i]);
далее мне нужно пойти в процедуру
procedure DataPrint(Data: PChar; RB: Word);
если я делаю из предыдущей процедуры вызов
DataPrint(@Data,RecvBytes);
то данные корректные, а если
DataPrint(@ArrPointer[i],ArrLength[i]);
или
DataPrint(ArrBuffer[i],ArrLength[i]);
то не корректные.
В чём ошибка, или как это лучше организовать?
McSimm (2002-06-11 10:03:00) [1]В процедуру Decoder передается Data типа Pointer.
Элемент массива тоже имеет тип Pointer.
Поэтому при
ArrPointer[i] := Data;
Элемент массива должен принять значение Data.
И если он принимает значение nil, значит в Data было значение nil.
Выполнение же
ArrPointer[i] := @Data;
есть запоминание адреса локальной переменной, что не имеет смысла
-------
Перед выполнением
CopyMemory(@ArrBuffer[i]....
была ли выделена память?
-------
FND (2002-06-11 00:32:00) [2]При объявлении процедуры напиши:
procedure Decoder(Var Data: Pointer; RecvBytes: Word);
а дальше...
по идее
ArrPointer[i]:=Data;
МИФИст (2002-06-08 18:49:00) [3]Если так, то в ArrPointer помещается nil.
esVer (2002-06-07 22:50:00) [4]Data: Pointer
ArrPointer: array[0..4999] of Pointer
почему ???
ArrPointer[i]:=@Data;
по идее
ArrPointer[i]:=Data;