mallocが呼び出されると、割り当てられたブロックに隣接してサイズが格納され、freeはどれだけ解放するかなどを知ることができます(http://c-faq.com/malloc/freesize.html)。
私の質問は、動的にメモリを割り当て、その後コード内でポインタをインクリメントするとします。
pointer++
そしてその後、私が
free(pointer)
実際に解放されるメモリはどれですか。
これは、「ポインタ」によって指される現在のアドレスから始まる割り当てられたバイト数ですか、それとも割り当てられたベース アドレスから始まる割り当てられたバイト数ですか。
ベストアンサー1
free()
から受け取ったのと同じポインタが必要ですmalloc()
。それを増分、変更、または変更することは未定義の動作であり、通常はセグメンテーション エラーになります。
受け取ったポインターを図書館から借りた本だと考えてください。家に帰って読みます。その後、表紙と本の裏表紙を外して、司書に返します。司書はそれを受け取ってくれるでしょうか、それとも大変なことになるでしょうか? ;-)