zmallocとafreeとSDL@シューティング

引き続きメモリと格闘中です。

先日のアドバイスを取り違えていて、malloc→ポインタをprintf→ポインタをprintf→free という風にコードしていました。すみません。
zmallocとafreeという関数を作ってmalloc後とfree直前のポインタをLogに書き出すようにしました。
このようになっています。

void * zmalloc(size_t size){
    void *memory = malloc(size);
    Log("Malloc : = %d\n",memory);
    return memory;
}
void afree(void *ptr){
    Log("Free : = %d\n",ptr);
    free(ptr);
}

あと、これからもLog関数はお世話になるかもしれないので、整備しました。
Log関数を可変引数に。

void Log(const char *format, ...){
    if(logging == TRUE){
        va_list arg;
        va_start(arg,format);
        vfprintf(outputfile,format,arg);
        va_end(arg);
    }
    return;
}

可変引数を使って関数を書いたのは今回が初めてです。
va_listはchar型のポインタをdefineしたものでした。
va_start関数がマクロで定義されていて、formatのアドレス+Intのサイズ?(sizeof(int))的な計算をしているのですが、何のためにそのように計算しているのかわかりませんでした。
va_end(arg)はargに0を代入しています。
・・・なんとなく、概要はわかった気がします。内部処理的なことは追えませんでした。


zmallocとafreeのペアをチェックしましたが、zmallocで確保された領域はすべてafreeを通っていました。
7Mもリークするので、SDL_Surfaceを疑っていたのですが、同じようにメモリ開放関数を通っているみたいです。


その後、ハマッたところが。ヘッダファイルの読み込みループ?です。
例で言うとa.hがb.hをincludeしてその逆も行っているような感じです。
応急処置的に読み込みループの一端だったヘッダファイルを#ifndef XX で再度読み込みしないようにしていますが、元からヘッダファイルの分割指針?が無かったのと、ヘッダファイルが多いので全体的にどう直してよいのか・・・という感じです。(下手に触ると同じようなエラーが起きそうで怖い)


ホーミングレーザーですが、SDL_Surfaceに(を使って)どうやってRGB減算処理するのか調査中