Is it possible to restore the normal execution flow of a C program, after the Segmentation Fault error?
struct A {
int x;
};
A* a = 0;
a->x = 123; // this is where segmentation violation occurs
// after handling the error I want to get back here:
printf("normal execution");
// the rest of my source code....
I want a mechanism similar to NullPointerException that is present in Java, C# etc.
Note: Please, don’t tell me that there is an exception handling mechanism in C++ because I know that, dont’ tell me I should check every pointer before assignment etc.
What I really want to achieve is to get back to normal execution flow as in the example above. I know some actions can be undertaken using POSIX signals. How should it look like? Other ideas?
I would beat someone with a bat if I saw something like this in production code though, it’s an ugly, for-fun hack. You’ll have no idea if the segfault have corrupted some of your data, you’ll have no sane way of recovering and know that everything is Ok now, there’s no portable way of doing this. The only mildly sane thing you could do is try to log an error (use write() directly, not any of the stdio functions – they’re not signal safe) and perhaps restart the program. For those cases you’re much better off writing a superwisor process that monitors a child process exit, logs it and starts a new child process.