However, If I don't start the thread there is an issue and that is, when calling Terminate, it creates memory leaks detected via HeapTrc.
Since it is your program that starts the thread, your program should know if it has started it or not and behave accordingly. This fact is very important.
On top of that, I can't seem to devise a way to determine if a thread is actually running before calling Terminate where I can instead just free it.
Even if you could (you can in Windows), as others have already pointed out, there is an inherent race condition between the code that makes the determination and the code that uses the determination's result since there is no guarantee that the state at one point in time is the same at a later point in time.
Shouldn't "Terminate" be able to determine if the thread is running and just simply FREE if not?
No. Your program is responsible for knowing what is has done and not done and take the corresponding actions.
You're expecting terminate to do work that is your program's responsibility to carry out and, in addition to that, it cannot carry out correctly in all cases.