次の assert は失敗しませんが、私の理解では失敗するはずです。私を修正してください。
#include <stdio.h>
#include <assert.h>
void custom_free(int **temp){
free(*temp);
}
int main(){
int *ptr = malloc(1024);
custom_free(&ptr);
assert(ptr); // doesn't fails ..why?
}
呼び出しfreeは、ポインターの値を変更しません。メモリを解放したい場合NULLは、自分で行う必要があります
void custom_free(int **temp){
free(*temp);
*temp = NULL;
}
「ポインターを解放する」わけではありませんが、ポインターによって参照されるメモリを解放することはできます。ポインタを変更するのfreeではなく、ポインタが指すものに対して何かを行うだけです。
freeあなたの問題は、呼び出しが関数で行われるかどうかとは関係ありません。追加してみる
*temp = 0;
freenullポインターを取得することを強制するための呼び出しの後。