Т.е. как язык для обучения системному програмированию, указателям, памяти и вот этому всему он просто отличный (для меня, по крайней мере). Да и вообще язык хорошо продуман и сделан. Но вакансий по нему меньше, да и кода написано не так много, поэтому использовать его имеет смысл в нужных местах, а не везде.
Я запустил его в gdb, там sigabrt. free() может отличить указатель, который выделен через malloc() (насколько я помню, он в место перед этим адресом пишет какую-то метаинфу) от рандомного указателя. Поэтому когда ему подсовывают указатель на стэк, он говорит, что это не его указатель и выдает SIGABRT.