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されているが、明示的にに設定されていないポインタを渡す場合は、おそらく無効なアドレスを渡しており、これを使用しようとすると、未定義の動作が発生し、セグメンテーション違反が発生します。freeNULLrealloc
いいえfree()、ポインタを0に設定しません。自分で行う必要があります。
reallocに渡されたポインターがnullの場合、mallocされます。
渡すポインタは、以前に//reallocから返された有効なポインタ、またはnullポインタのいずれかである必要があります。malloccallocrealloc
メモリを解放する場合は、ポインタを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)が実行されます。