1

次の 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?
}
4

2 に答える 2

3

呼び出しfreeは、ポインターの値を変更しません。メモリを解放したい場合NULLは、自分で行う必要があります

void custom_free(int **temp){
      free(*temp); 
      *temp = NULL;
}
于 2013-11-10T22:03:44.913 に答える
2

「ポインターを解放する」わけではありませんが、ポインターによって参照されるメモリを解放することはできます。ポインタを変更するのfreeではなく、ポインタが指すものに対して何かを行うだけです。

freeあなたの問題は、呼び出しが関数で行われるかどうかとは関係ありません。追加してみる

*temp = 0;

freenullポインターを取得することを強制するための呼び出しの後。

于 2013-11-10T22:03:47.147 に答える