Catching Acces Violation/Segmentation Fault
Silverling
este_aqui_ at hotmail.com.remove.underscores
Wed May 9 12:54:08 PDT 2007
BCS Wrote:
> Reply to silverling,
>
> > I am programming a Matrix class to be used like a primitive type
> > (overloaded operators, identity, transpose, the whole shebang) and one
> > of the constructors _may_ cause an Access Violation (or Segmentation
> > Fault, if you prefer the old Linux SIGSEG) if the class's user is
> > foolish. Is there a way to catch this errors?
>
> Put this in somewhere at global scope and all seg-v's will throw an Error
> by passing signal a different function you can make it do other things.
>
> // stubs for access to unix signal handeling
> alias void function(int) sighandler_t;
>
> extern (C) sighandler_t signal(int signum, sighandler_t handler);
>
> const int SIGHUP = 1; // Term Hangup detected on controlling terminal or
> death of controlling process
> const int SIGINT = 2; // Interrupt from keyboard
> const int SIGQUIT = 3; // Quit from keyboard
> const int SIGILL = 4; // Illegal Instruction
> const int SIGABRT = 6; // Abort signal from abort(3)
> const int SIGFPE = 8; // Floating point exception
> const int SIGKILL = 9; // Kill signal
> const int SIGSEGV = 11; // Invalid memory reference
> const int SIGPIPE = 13; // Broken pipe: write to pipe with no readers
> const int SIGALRM = 14; // Timer signal from alarm(2)
> const int SIGTERM = 15; // Termination signal
>
> static this()
> {
> // trap seg-v and report as error (not sure this is working)
> signal(SIGSEGV,function void(int i){throw new Error("SEGV");});
> }
>
>
This is great! Thanks! Now I only need to throw an exception. Unfortunatly, it will only work on linux :( meaning the module is not portable.
More information about the Digitalmars-d-learn
mailing list