Как правильно сохранить адреса блоков памяти в массиве?
А так же в элементе структуры?
Обычно
*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 next
SadStar
Как-то так
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 » Как правильно сохранить адреса блоков памяти в массиве?