In any computer is a special memory area that is called the "Stack", thats where local variables are stored. This stack is overwritten by new variables when you return from a function, thats why you can not do something like
return(Copy_c);
the content of copy_c is garbage as soon as you leave the function. In your case its even worse, for some strange reason you are setting copy_c to a pointer to the nullvector, so your overwriting the nullvector in your function and subsequently the nullvector is not null anymore which I guess will crash the engine sooner or later.
A function can return a single value or a pointer but only if the pointer was not local in that function, otherwise the pointer points to some place on the "Stack" and that place is soon overwritten by the next function.
This is ok:
function (VECTOR* A)
{
... return A; // ok because A was defined outside
}
This is not ok:
function (VECTOR* A)
{
VECTOR* B;
... return B; // not ok because B is a pointer that does not exist outside the function
}
But this is ok again:
function (..)
{
var c;
... return c; // ok because single vars are copied when they are returned.
}
Sorry if this sounds confusing but once you get it you'll see programming is very logical, on the internet there are many introductions into programming that are much better than I can give here, like:
http://www.cprogramming.com/tutorial.html#ctutorialhope this helps...