#include <stdlib.h>

void main()
{
unsigned char* p = (unsigned char*)malloc(123);
free(p);
}

たとえば、これは実行時にメモリエラーにならないけど。

#include <stdlib.h>

void main()
{
unsigned char* p = (unsigned char*)malloc(123);

// p が指すメモリの、一つ手前の位置の値を、異常な数値に書き換える。
*(p-1) = 0xFF;

free(p);
}

これだと、free(p); が実行時エラーになったです(gcc, eglibc)

逆に言うと、このmallocの内部的な基本ブロックとして使われてる共用体のフォーマットがわかれば、(struct malloc_unit*)(p-1)->len = 3;などと書き換えて、
free()で開放するメモリの量を勝手に多くしたり少なくしたりもできるかもしれないなぁ…と思いました。(なにもメリットありませんがw)