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

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

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

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

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

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

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

textual
Листинг программы
  1. ...
  2. _CODE       SEGMENT PARA PUBLIC USE32 'CODE'
  3.     ALIGN 16
  4.     PUBLIC  P$PROGRAM_P$TTEST
  5. P$PROGRAM_P$TTEST:
  6. ; Temps allocated between ebp-28 and ebp-4
  7. ; [b.pas]
  8. ; [6] begin
  9.         push    ebp
  10.         mov ebp,esp
  11.         sub esp,28
  12.         mov dword ptr [ebp-28],esi
  13.         mov dword ptr [ebp-24],edi
  14. ; Var t located at ebp-4
  15.         mov dword ptr [ebp-4],eax
  16.         mov esi,dword ptr [ebp-4]
  17.         lea edi,dword ptr [ebp-20]
  18.         cld
  19.         mov ecx,4
  20.         rep movsd
  21. ; [7] end;
  22.         mov esi,dword ptr [ebp-28]
  23.         mov edi,dword ptr [ebp-24]
  24.         leave
  25.         ret
  26. _CODE       ENDS
  27.  
  28. _CODE       SEGMENT PARA PUBLIC USE32 'CODE'
  29.     ALIGN 16
  30.     PUBLIC  PASCALMAIN
  31. PASCALMAIN:
  32.     PUBLIC  _main
  33. _main:
  34. ; Temps allocated between ebp+0 and ebp+0
  35. ; [9] begin
  36.         push    ebp
  37.         mov ebp,esp
  38.         call    FPC_INITIALIZEUNITS
  39. ; [10] p(t);
  40.         mov eax,offset U_P$PROGRAM_T
  41.         call    P$PROGRAM_P$TTEST
  42. ; [11] end.
  43.         call    FPC_DO_EXIT
  44.         leave
  45.         ret
  46. ; End asmlist al_procedures
  47. ; Begin asmlist al_globals
  48. _CODE       ENDS

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


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

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

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы