Probably on the first line:
memset(&/*SF_INFO*/mInfo, 0, sizeof(SF_INFO));
You're calling sf_open_fd() later using mInfo as a pointer parameter, so I'm guessing mInfo is actually a SF_INFO* rather than an SF_INFO. memset() allows any pointer type so you don't get a compile error.
Incidentally, you shouldn't need to write to the disk - tmpfile() returns an opened file that should work with fileno().
Edit: Actually rereading your question I may have misunderstood when you said you didn't know where the SEGFAULT is occurring. One thing I found in the libsndfile docs is that sf_open_fd() can't be used if your program is linked against a different runtime than the library. That might be the problem.