Как правильно сохранить адреса блоков памяти в массиве?
А так же в элементе структуры?
Обычно
*mem=AllocateMemory(bufLen)
....
PokeB(*mem,$02)
PokeB(*mem+1,$01)
....
=PeekB(*mem+p)
....
и т.п
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как правильно сохранить адреса блоков памяти в массиве?
Как правильно сохранить адреса блоков памяти в массиве?
А так же в элементе структуры?
Обычно
*mem=AllocateMemory(bufLen)
....
PokeB(*mem,$02)
PokeB(*mem+1,$01)
....
=PeekB(*mem+p)
....
и т.п
Не совсем понятно что требуется в конечном итоге.
Просто сохранить адреса и все?
В приведенном примере вместо *mem использовать элемент массива или элемент структуры (которая связана в LinkedList).
Проблема в том, что заранее неизвестно сколько блоков памяти разного размера нужно будет выделить.
Все равно не до конца не понятно в чем сложность.
Если нужно в каждом элементе списка хранить указатель на память, то в чем проблема?
NewList Test.i()
*mem=AllocateMemory(100)
If *mem
If AddElement(Test())
Test()=*mem
Else
FreeMemory(*mem)
EndIf
EndIfХотя в качестве памяти можно использовать массив.
Structure Buff Array Buff.a(0) EndStructure NewList Test.Buff()
Или нужно это?
Structure Test x.l y.l EndStructure *x.Test=AllocateMemory(SizeOf(Test)) If *x *x\x = 10 *x\y = 20 Debug *x\x Debug *x\y FreeMemory(*x) EndIf
Если работать через промежуточную переменную *mem
то получается примерно так
Protected Dim aAddrOfOID.i(QTY_OID)
...
*mem=AllocateMemory(...)
If *mem ; сохранить адрес
aAddrOfOID(i)=*mem
i+1
Else
Ok=#False
EndIf
.....
*OID=aAddrOfOID(i-1) ; попользоваться блоков памяти
OID_Size=MemorySize(*OID)
....
CopyMemory(*OID,....,OID_Size)
....
; почистить память
for i=1 to QTY_OID
If aAddrOfOID(i-1)
*mem=aAddrOfOID(i-1)
FreeMemory(*mem)
EndIf
nextSadStar
Как-то так
Structure MyStructure
*adr
len_mem.i
EndStructure
Protected Dim aAddrOfOID.MyStructure(QTY_OID)
...
*mem=AllocateMemory(len)
If *mem
aAddrOfOID(i)\adr=*mem
aAddrOfOID(i)\len_mem=len
i+1
Else
Ok=#False
EndIf
.....
*OID=aAddrOfOID(i-1)\adr; ?????????????? ?????? ??????
OID_Size=aAddrOfOID(i)\len_mem
....
CopyMemory(*OID,....,OID_Size)
....
; ????????? ??????
For i=1 To QTY_OID
If aAddrOfOID(i-1)\adr
FreeMemory(aAddrOfOID(i-1)\adr)
EndIf
NextВы здесь » PureBasic - форум » Вопросы по PureBasic » Как правильно сохранить адреса блоков памяти в массиве?