図 54 は、ヒープ記憶域の誤用に関連して起こる可能性のある問題を示しています。
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+.... *-----------------------------------------------------------------* * ヒープ記憶域の誤用 * *-----------------------------------------------------------------* D Fld1 S 25A BASED(Ptr1) D Ptr1 S * /FREE Ptr1 = %ALLOC(25); DEALLOC Ptr1; // この時点以降は、基底ポインター Ptr1 は割り振られた記憶域を // 指さなくなるので、Fld1 にアクセスすることはできません。 SomePgm(); // 'SomePgm' への以前の呼び出し時に、複数の記憶域の割り振りが行なわれた // 可能性があります。 // いずれにしても、記憶域の 25 バイトに 'a' が埋め込まれているため、 // 以下の割り振りを行なうのは非常に危険です。 // この記憶域が現在何に使用されているのかを知ることはできません。 Fld1 = *ALL'a'; /END-FREE
同様に、以下のような場合にもエラーが発生する可能性があります。
この記憶域が解放されるのは、活動化グループが終了した後です。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.