realloc
'dされたポインタにメモリを割り当てるために使用しようとするとfree
、セグメンテーション違反が発生します。malloc
代わりに使用すれば、この問題は発生しませんが。
変数がfree
'dされた後の私の理解によると、それはポインターと同等ですがNULL
、なぜこの予期しない動作なのですか?私は何かが足りないのですか?
realloc
'dされたポインタにメモリを割り当てるために使用しようとするとfree
、セグメンテーション違反が発生します。malloc
代わりに使用すれば、この問題は発生しませんが。
変数がfree
'dされた後の私の理解によると、それはポインターと同等ですがNULL
、なぜこの予期しない動作なのですか?私は何かが足りないのですか?
変数が解放された後の私の理解によると、それはNULLポインターと同等です。
NULL
ポインタは、値がNULL
;であるポインタです。realloc
この値を解釈する方法を知っているような標準関数。
解放されたメモリへのポインタは、無効なポインタになりました。その値は変わりません。 realloc
はそれが無効であることを知らず、それにアクセスしようとし、セグメンテーション違反につながります。
free
'dされたポインタは、ポインタと同等ではありませんNULL
。電話をかけた後、自分free
へのポインタを設定する必要がありNULL
ます。
'drealloc
されているが、明示的にに設定されていないポインタを渡す場合は、おそらく無効なアドレスを渡しており、これを使用しようとすると、未定義の動作が発生し、セグメンテーション違反が発生します。free
NULL
realloc
いいえfree()
、ポインタを0に設定しません。自分で行う必要があります。
reallocに渡されたポインターがnullの場合、mallocされます。
渡すポインタは、以前に//realloc
から返された有効なポインタ、またはnullポインタのいずれかである必要があります。malloc
calloc
realloc
メモリを解放する場合は、ポインタをrealloc
再度渡す前に、ポインタをNULLに設定する必要があります。free
ポインタをNULLに設定しません(または、他の方法でポインタ自体を変更することもありません。ポインタ自体ではなく、ポインタのコピーを受け取るため、変更できません)。
いいえ、free
'dポインタはnullポインタと同等ではありません。 free
渡されたポインタを変更しないため、ポインタは引き続き同じメモリ位置を指します。これは現在、未割り当てのメモリです。
これを実行しようとするrealloc
と、メモリアロケータが混乱して内部構造が破損するため、セグメンテーション違反が発生します。
これは、DebianLinuxボックスのmanrealloc(3)から、知っておく必要のあるすべてのことを教えてくれるはずです。基本的に、realloc()を使用する前に解放しないでください。
realloc()は、ptrが指すメモリブロックのサイズをsizeバイトに変更します。内容は、新旧の最小サイズに変更されません。新しく割り当てられたメモリは初期化されません。ptrがNULLの場合、sizeのすべての値について、呼び出しはmalloc(size)と同等です。sizeがゼロに等しく、ptrがNULLでない場合、呼び出しはfree(ptr)と同等です。ptrがNULLでない限り、malloc()、calloc()、またはrealloc()への以前の呼び出しによって返された必要があります。指している領域が移動した場合、free(ptr)が実行されます。