Both are functionally equivalent. But, in my opinion, method #2 is easier to use. A few reasons for prefering 2 over 1 are:
It is more intuitive. Why should I have to call free on the object after I have (apparently) destroyed it using myStruct_Destroy.
Hides details of myStruct from user. He does not have to worry about it's size, etc.
In method #2, myStruct_init does not have to worry about the initial state of the object.
You don't have to worry about memory leaks from user forgetting to call free.
If your API implementation is being shipped as a separate shared library however, method #2 is a must. To isolate your module from any mismatch in implementations of malloc/new and free/delete across compiler versions you should keep memory allocation and de-allocation to yourself. Note, this is more true of C++ than of C.