Проблемы с выделенной памятью - PullRequest
0 голосов
/ 28 декабря 2018

Я новичок в сборке и все больше узнаю.У меня есть проблема, которую я пытался написать в те дни, но у меня есть некоторые проблемы с ней.Я должен был написать программу, которая динамически распределяет и освобождает память из динамической памяти, поддерживаемой операционной системой.Программа работает, но есть проблемы.В основной процедуре память выделяется, но призыв к свободе не совсем верен.

Мне нравится знать, как я могу добавить аргумент clear, выдвинутый в процедуру.так выделенная память освобождается?

Это для сборки x86 32b с использованием Irvine, и программа работает.

INCLUDE Irvine32.inc


HANDLE      TEXTEQU <DWORD>


H_ZERO_MEM  EQU    8


GetProcessHeap  PROTO

HeapAlloc       PROTO,  

                hHeap:HANDLE, 

                dwflags: DWORD, 

                dwbytes: DWORD

HeapFree        PROTO,  

                hHeap:HANDLE, 

                dwFlags:DWORD,

                lpMem:DWORD

.data

MSGAlloc    BYTE           " Successfully allocated ",0 

MSGFree     BYTE           " Successfully freed",0      

notAllocMSG BYTE           " Error in allocating. Please try again! ",0

notFreeMSG  BYTE           " There was an error freeing the heap memory",0 

sizeH       DWORD          ?


.code


Alloc       Proc

            push        ebp

            mov         ebp,esp

            INVOKE      GetProcessHeap

            cmp         eax, 0

            je          doNotAlloc

            INVOKE      HeapAlloc, eax, H_ZERO_MEM, [ebp +8] 

doNotAlloc:

            pop         ebp

            ret         4


Alloc       Endp

FREE        proc 

            push            ebp

            mov             ebp,esp

            INVOKE          GetProcessheap

            cmp             eax, 0

            je              doNotFree

            INVOKE          HeapFree , eax, 0, [ebp + 8]

doNotFree:

            pop             ebp

            ret              4

FREE        Endp

main        proc    

            mov              sizeH  , 1024

            mov              eax, sizeH

           push              eax

           call              ALLOC

           cmp               eax, 0

           je                notAlloc

           push              eax

           mov               eax, sizeH 

           call              writedec

           mov               edx, offset MSGAlloc

          call               writestring

          call               crlf  

          call               FREE

          cmp                eax, 0


          je                notHeapFreed

          mov               eax, sizeH 

          call              writedec

          mov               edx, offset MSGFree

          call              writestring

          jmp               endMSG


notAlloc:

          mov               edx, offset notAllocMSG

          call              writestring

          jmp               endMSG

notHeapFreed:

          mov               edx, offset notFreeMSG

          call              writestring

endMSG:
          Exit

main      ENDP

          END               main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...