Как я себе представлял ситуацию: при создании массива на уровне процедуры в стеке выделяется место только под указатель на SA. То есть, четыре байта. Под саму SA память выделяется в каком-то произвольном (по меньшей мере, не важно в каком) месте. Под данные массива память выделяется ещё в каком-то месте. Причем, для статического сразу при вызове процедуры, а для динамических - при редиме.
При выходе из процедуры сначала уничтожаются данные - по адресу из SA. Так как этот адрес мы подменяли, нам нужно вписать туда либо то, что было, либо ноль. Если вписываем ноль, значит данные вообще не уничтожаются, так? То есть, то, что выделено редимом, должно остаться висеть.
Раз ты вписываешь в SA именно ноль, а не старый адрес, значит, мои представления, вероятно, были не верны. Тогда получается, что уничтожение данных происходит без использования информации из SA? По меньшей мере, для фиксированных массивов. Поэтому я и предположил, что для них размапливать не обязательно. Или это по-разному под ИДЕ и в релизе?
В общем, пока получилось противоречие: если при уничтожении данных адрес из SA используется, то почему мы туда пишем 0, а не прошлый адрес? ведь тогда память, изначально выделенная под массив, не освободится. Если при уничтожении данных адрес из SA не используется (просто как-то хитро уничтожается именно то, что выделено), то зачем вообще размапливать уничтожаемую SA?
И вот ещё что очень интересно:
Потому что я хочу сделать классный кирпич, в котором вместо SaMap — какая-нибудь функция с другим более понятным называнием, а вызывать SaUnmap (про вызов которого если забыть — будт утечка памяти) будет вообще не нужно, потому что SaUnmap будет вызываться автоматически при выходе из процедуры, и в котором не нужно будет вызывать AryPtr.
Как в принципе ты планировал добиться того, чтобы при выходе из процедуры что-то вызывалось?