Ответ прямо в ваших комментариях. Вы не ставите myIx_p = *null
после dealloc
. Невозможность установить для него значение *null
означает, что он по-прежнему указывает на то же место в памяти, которое было только операционной системой, которое больше не видит его как выделенное. Наблюдаемое вами поведение вполне ожидаемо. Исправление очень просто:
// caller only wants to shutdown the proc
if (piShutDown and myIx_p <> *null);
dealloc myIx_p;
myIx_p = *null;
return 0;
endif;
Вы также можете разрешить его, как указано в документации IBMi:
// caller only wants to shutdown the proc
if (piShutDown and myIx_p <> *null);
dealloc(n) myIx_p;
return 0;
endif;
Если вы не используете (n), вы должны установите для него значение * null, как в первом примере. См. Документацию по dealloc
здесь: https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/rzasd/zzdeall.htm