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