Ternick, а то, что программа убивает только тот процесс, который сама создала. Для того, чтобы убить процесс, нужно найти его handle и уже для него вызывать TerminateProcess.
devEngineer, почитайте литературу об операциях со строками в си. И да, как вам уже выше написали, вы пытаетесь освободить память, не выделенную в куче (т. е. через malloc) через функцию free - отсюда и падение приложения.