I've recently seen a couple of open source projects that actually do this; return an unsafe pointer from a function such as: "int* input = this.someIterator.GetUnsafePtr()".
From my understanding this has to be completely wrong. Unsafe pointers can only be obtained through 'fixed' statements and certainly those returned from within a function won't be pinned anymore (they will 'lose' their declaring scope), causing them to eventually be garbage collected.
But then I don't remember the compiler giving any warning about this either, so why bother to use a fixed statement if you can actually have 'unpinned' pointers spread all over?