通常の free の話だけじゃなくて
sqlite3_close 内で sqlite3_free が呼ばれるかまで含んだ話だから
free をマクロで置き換えるとかじゃどうしようもない
sqlite3_close の実装が変更できる状況であればソースがあるわけで、
sqlite3_free を呼んでるかはソース読めば分かるわけだし、
最悪分からなくてもログ仕込めばいい
実装を変更できない状況でどうするかとなると、
free や sqlite3_free などの後に実行するとエラーになる処理や
free や sqlite3_free などによるメモリ上の何らかの変化の存在が分かれば、それで判別できる
あとはリバースエンジニアリング、
あるいはライブラリファイル内の free や sqlite3_free などのコードを
ログ出すだけの処理に改竄するとか