The following code is unsafe, because the GC is free to move the 'values' array once we're out of the fixed statement:
fixed (nfloat *ptr = values)
return (IntPtr) ptr;
this means that the calling function now has pointer to memory that the GC can move at any time.
Raising priority and targeting the next release (15.6), since this will cause random crashes (or other random behavior) when it occurs, and it will be very tricky to track down.