他のすべての人が言ったように、あなたのコードは未定義の動作を引き起こします(何でも起こり得ます)。
ヒープ メモリ アロケータ (malloc) は、領域を解放した後に領域に格納されたデータに対して責任を負いません。
malloc の役割を理解すると、結果が表示される理由、間違ったプログラミング方法、および常に機能しない理由を説明するのに役立ちます。
Malloc は glibc のヒープ メモリ アロケータ (_int_malloc および _int_free) です。ここでそのコードを表示できます [ http://code.woboq.org/userspace/glibc/malloc/malloc.c.html#_int_malloc]。
誰かがこの動作を説明できますか?
コミカルな例は、質問をすばやく明確にするのに役立ちます。
どの部屋 ( memory )にも鍵がないモーテル ( sbrk(2) ) から部屋 ( memory )を借りているとします。. 受付係 ( malloc ) に行き、部屋 (メモリー) を要求すると、彼女は利用可能な部屋を提供し、部屋 (メモリー) を受け取り、それを使用します。
あなたはそれを使い果たし、今度はそれを再び使用しないことを彼女に約束します(解放します). 彼女は自分の本に、あなたの部屋 (メモリー) は無料で、他の人に割り当てることができると書いています。部屋を他の誰かに譲るかどうかは完全に彼女の願いです。
あなたはしばらくしてからあなたの部屋を見に来ます(受付係はあなたをチェックしません)、あなたが部屋を使用している人がいない場合は幸運です(あなたが残したのと同じくらい散らかっています!)
受付係 (malloc) の仕事は、退去後 (無料) に約束を守ることを信頼して、部屋 (メモリ) をできるだけ早くあなたに割り当てることです。彼女の仕事は、部屋の使用を妨げることではありません (メモリー) !
許可されていない場所(読み取り専用領域)にアクセスすると、所有者(カーネル)は激怒します(例外)。
私は初心者で、このように答えるのが適切かどうかわかりません。間違っている場合は教えてください。mallocを使用することを強くお勧めします