Диагностика выделения динамической памяти - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д