
No.2ベストアンサー
- 回答日時:
mallocやfreeで管理されているメモリ(このメモリ領域は「ヒープメモリ」と言います)は「管理データ」と「ユーザーデータ」が交互に並んでいます。
そして「管理データ」には「ここは○○バイト使ってる」とか「ここは○○バイト空いてる」と言うデータが書き込まれます。
そして、mallocは「管理データを先頭から辿り、空きマークが付いている管理データを探し、管理データに使用中マークを付けてから、見つけた管理データの直後にある、ユーザーデータの先頭アドレス」を返します。
また、freeは「ユーザーデータの先頭アドレスを受け取って、その直前にある管理データを書き換え、空きマークを付ける」と言う事をします。
No.3
- 回答日時:
確実に挙動を把握するためにはfree()のソースを確認した方がよいかと。
MS-DOSやらWindowsやらではたいていすでに回答のついている方法で管理しているようです。
# malloc()で確保したメモリ領域が指定されたサイズより大きい。ということはありますが。
そんなワケで、バッファオーバーフローやバッファアンダーフローして書き換えた場合に、その後のmalloc()/calloc()/realloc()/free()等で吹っ飛ぶ。
という不具合発生箇所とその結果がかけ離れた場所に…というコトも起こります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
allocってなんですか?
-
LoadLibraryでAccess Violation...
-
入れ子になった構造体について
-
座標値を読み込んである領域に...
-
構造体でchar name[]と*nameの...
-
void*型のデータサイズ
-
DLLのマルチスレッドの動作につ...
-
構造体配列の初期化について
-
C言語 mallocとfreeについて
-
Win32APIでのメモリ管理について
-
DLLで同じメモリ領域を参照する...
-
mallocによる確保外の領域への参照
-
mallocで確保するメモリの領域...
-
CreateFileMapping について
-
CStringからchar*への型変換に...
-
リッチテキストボックスの中身...
-
「#undef」と「#define」の使い...
-
C# Listを使わずに2次元配列の...
-
TCHAR文字列内の検索について
-
C言語 配列の長さの上限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
C++のnewで確保したメモリーの...
-
ヒープメモリの解放について
-
malloc呼び出し時のセグメンテ...
-
配列の添え字の最大数とは?
-
LoadLibraryでAccess Violation...
-
入れ子になった構造体について
-
Accessで、メモリを開放するタ...
-
VB.netでのwin32api呼び出し
-
DLLで同じメモリ領域を参照する...
-
デストラクタを呼びたい
-
win32APIのHeapAlloc()の使い方...
-
メモリ不足になってしまう。
-
C言語 mallocとfreeについて
-
ビットをローテートするプログ...
-
座標値を読み込んである領域に...
おすすめ情報