Диагностика выделения динамической памяти - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, господа знатоки. Подскажите, пожалуйста, как проверить, было ли выделение памяти из кучи успешным. Мне нужен аналог кода на плюсах: item* temp = new Item; if (!temp) {... У разработчиков написано, что если в системе нет свободной памяти и процедура new не смогла разместить динамическую переменную, то значение стандартной логической переменной ReturnNilIfGrowHeapFails меняется с false на true, аргумент процедуры new инициализируется константой nil и генерируется ошибка времени выполнения. Можно ли какой-то директивой отменить сие действо (генерацию runtime error) и обработать ситуацию

не применяя исключения

. Заранее благодарна P.S. И вопрос не по теме. От чего зависит толкование TextAttr? Почему на одной машине 4 старших бита отводятся на цвет фона, а на другой 3 на фон и 1 на мерцание, как и сказано в мануале?

Решение задачи: «Диагностика выделения динамической памяти»

textual
Листинг программы
...
_CODE       SEGMENT PARA PUBLIC USE32 'CODE'
    ALIGN 16
    PUBLIC  P$PROGRAM_P$TTEST
P$PROGRAM_P$TTEST:
; Temps allocated between ebp-28 and ebp-4
; [b.pas]
; [6] begin
        push    ebp
        mov ebp,esp
        sub esp,28
        mov dword ptr [ebp-28],esi
        mov dword ptr [ebp-24],edi
; Var t located at ebp-4
        mov dword ptr [ebp-4],eax
        mov esi,dword ptr [ebp-4]
        lea edi,dword ptr [ebp-20]
        cld
        mov ecx,4
        rep movsd
; [7] end;
        mov esi,dword ptr [ebp-28]
        mov edi,dword ptr [ebp-24]
        leave
        ret
_CODE       ENDS
 
_CODE       SEGMENT PARA PUBLIC USE32 'CODE'
    ALIGN 16
    PUBLIC  PASCALMAIN
PASCALMAIN:
    PUBLIC  _main
_main:
; Temps allocated between ebp+0 and ebp+0
; [9] begin
        push    ebp
        mov ebp,esp
        call    FPC_INITIALIZEUNITS
; [10] p(t);
        mov eax,offset U_P$PROGRAM_T
        call    P$PROGRAM_P$TTEST
; [11] end.
        call    FPC_DO_EXIT
        leave
        ret
; End asmlist al_procedures
; Begin asmlist al_globals
_CODE       ENDS

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы