4

通常、ポインタが2回解放されると、2回解放されます。例えば、

char *ptr;
ptr=malloc(5 * sizeof(*ptr));
free(ptr);
free(ptr);

上記のコードはダブルフリーと見なされます。以下もダブルフリーと見なされますか?

char *ptr;
char *ptr1;
ptr=malloc(5 * sizeof(*ptr));
ptr1=ptr;
free(ptr);
free(ptr1);

ありがとうございました。

4

5 に答える 5

10

はい。同じメモリを2回解放しています。

于 2010-08-02T16:34:56.840 に答える
10

はい。ライブラリは、ソースコードで変数にどのような名前を付けたかを気にしません(コードが実行されるまでに長い間使用されていません)。重要なのは値だけであり、この場合、渡される値free()は同じになります。

于 2010-08-02T16:37:22.343 に答える
0

はい。ポインタは両方とも同じアドレスを指しているため、同じアドレスを解放に渡します。

あなたはそれを印刷することによってポインタの値が何であるかを示すことができます

printf( "%p", ptr);

またはデバッガーでそれを見てください

于 2010-08-02T16:37:51.983 に答える
0

うん。ダブルフリーとは、すでに解放されているメモリブロックを解放しようとする場合です。ptrとptr1の両方が同じメモリブロックを指しているため、への2番目の呼び出しfreeは、すでに解放されているメモリブロックを解放しようとしています。

于 2010-08-02T16:35:56.807 に答える
0

はい、これはダブルフリーです(そして非常に悪いことです)。ptr1は、mallocによって割り当てられたメモリへのポインタです。これは、ptrが指していたのと同じ場所です。ptrとptr1を解放すると、同じメモリが2回解放されます。

于 2010-08-02T16:41:47.243 に答える