My $0.02 is on a dull explanation: the max length and #remembered parameters must be configurable and/or depend on the access method, and the printf-like call that creates the message string must have passed erroneous pointers pointing into some DLL. When that DLL changed, or when another DLL changed in size, causing the DLL to move, the pointers pointed to different, but still constant data.