Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

etc.linux.memoryerror

Handle page protection errors using D errors (exceptions) or asserts.
License:
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE_1_0.txt)
Authors:
Amaury SECHET, FeepingCreature, Vladimir Panteleev
nothrow @system bool registerMemoryErrorHandler();
Register memory error handler, store the old handler.
NullPointerError is thrown when dereferencing null pointers. A generic InvalidPointerError error is thrown in other cases.
Returns:
whether the registration was successful

Limitations Only x86 and x86_64 are supported for now.

nothrow @system bool deregisterMemoryErrorHandler();
Revert the memory error handler back to the one from before calling registerMemoryErrorHandler().
Returns:
whether the registration of the old handler was successful
class InvalidPointerError: object.Error;
Thrown on POSIX systems when a SIGSEGV signal is received.
class NullPointerError: etc.linux.memoryerror.InvalidPointerError;
Thrown on null pointer dereferences.
bool registerMemoryAssertHandler()();
Registers a signal handler for SIGSEGV that turns them into an assertion failure, providing a more descriptive error message and stack trace if the program is compiled with debug info and D assertions (as opposed to C assertions).
Differences with the registerMemoryErrorHandler version are:
  • The handler is registered with SA_ONSTACK, so it can handle stack overflows.
  • It uses assert(0) instead of throw new Error and doesn't support catching the error.
  • This is a template so that the -check and -checkaction flags of the compiled program are used, instead of the ones used for compiling druntime.
Returns:
whether the registration was successful
@system bool deregisterMemoryAssertHandler();
Revert the memory error handler back to the one from before calling registerMemoryAssertHandler().
Returns:
whether the registration of the old handler was successful