1

だから、私はこの状況にあります。終了ハンドラーと、以前にヒープに割り当てられた構造体へのポインター。

私がしたいのは、ハンドラーを使用してそれらを選択的に解放することです。対応する構造体が割り当てられている場合、ポインターごとに解放する必要があります。整数 (1 ポインター -> 1 int) を使用して、すべてのポインターの状態 (割り当て済みまたは解放済み) を制御し、ハンドラーが解放する必要があるかどうかを判断します。

これがコードです

/*HEAP STATUS GLOBAL VARIABLES (1 => free required)*/
int free_addrinfo, free_up_rcvd, free_rc_rcvd, free_rc_rspn;

/*HEAP POINTERS*/
struct addrinfo *result;
USR_PSW *up_rcvd;
TBOOK_RECORD *rc_rcvd, *rc_rspn; 

void termination_handler(){
    close(sock_ds);
    close(acc_sock_ds);
    if(free_addrinfo) freeaddrinfo(result);
    if(free_up_rcvd) free(up_rcvd);
    if(free_rc_rcvd) free(rc_rcvd);
    if(free_rc_rspn) free(rc_rspn);
   _exit(EXIT_SUCCESS);
}

よりスマートなソリューションはありますか? よろしくお願いします!

4

1 に答える 1

2

初期化時に変数を NULL に設定し、解放時に再び NULL にリセットします。自然なポインターが既にある場合、ポインターが初期化されていることを示す別のインジケーターを保持する理由はありません。

実際には、ポインターをいつ解放する必要があるかについて疑いの余地がないようにコードを記述しようとします。しかし、それが不可能な場合は、NULL チェックで十分です。

于 2013-04-17T07:15:10.900 に答える