On platforms with sizeof(wchar_t) == 4, newJavaString attempts to alloca() temporary memory in order to copy the larger-sized values into Java jchar. It's possible that this call may be failing (which is a bug, since it should throw OOM on failure rather than crashing).
Normally, Pointer.getString(0, true) is the appropriate method for extracting a string.
As a workaround, Pointer.indexOf(offset, value) can help find the string's nul terminator (but note that it looks for a single zero byte; you will need to look for N zero bytes in a row starting at a multiple of N, where N == Pointer.WCHAR_SIZE. Once you determine the native string length, you can use a StringBuffer to build up the string by extracting smaller chunks of char[] instead of reading all out at once.