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