Malloc
また、C言語よりも厳密な型システムを持つC++では、T *からvoid *への型変換は暗黙的に行なわれるものの、void *からT *への型変換は暗黙的に行なわれないため、C/C++両方でコンパイルすることのできるソースコードを書く際には型変換の記述が必要となる。
しかし、stdlib.hをインクルードし忘れた場合(malloc関数の前方宣言がない場合)、Cコンパイラはmallocがint型を返す関数であるとみなす。mallocの戻り値を明示的に型変換していると、ヘッダーをインクルードし忘れたことに気づかない。一方、明示的に型変換していないと、コンパイル時にintをポインタ型変数に代入しようとしているとして何らかの警告あるいはエラーメッセージがコンパイラから表示されることでインクルード忘れに気づける可能性がある。例えば64ビットのシステムでLP64というデータモデルを採用している場合、longとポインタは64ビットだが、intは32ビットとなる。この場合stdlib.hのインクルード忘れに気づかないと、mallocが実際には64ビットのポインタを返すのに、32ビットの値を返すと暗に宣言したことになり、バグが生じる可能性がある。ただし、多くのコンパイラは宣言のない関数を使用していると(キャストの有無にかかわらず)コンパイル時に警告を出す。
メモリ管理の実装はオペレーティングシステム (OS) と(ハードウェア)アーキテクチャに大きく依存する。OSによってはmallocのためのアロケータを提供しているし、データ領域の制御関数を提供している場合もある。
同じ動的メモリアロケータでmallocだけでなくC++の operator new も実装していることが多い。そこでこれを malloc ではなく「アロケータ」と呼ぶ。