PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как правильно сохранить адреса блоков памяти в массиве?


Как правильно сохранить адреса блоков памяти в массиве?

Сообщений 1 страница 6 из 6

1

Как правильно сохранить адреса блоков памяти в массиве?
А так же в элементе структуры?

Обычно
*mem=AllocateMemory(bufLen)
....
PokeB(*mem,$02)
PokeB(*mem+1,$01)
....
=PeekB(*mem+p)
....
и т.п

0

2

Не совсем понятно что требуется в конечном итоге.
Просто сохранить адреса и все?

0

3

В приведенном примере вместо *mem использовать элемент массива или элемент структуры (которая связана в LinkedList).
Проблема в том, что заранее неизвестно сколько блоков памяти разного размера нужно будет выделить.

0

4

Все равно не до конца не понятно в чем сложность.
Если нужно в каждом элементе списка хранить указатель на память, то в чем проблема?

Код:
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

0

5

Если работать через промежуточную переменную *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

0

6

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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как правильно сохранить адреса блоков памяти в массиве?