fork download
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <signal.h>
  5. #include <limits.h>
  6.  
  7. void segfault_handler(int sig);
  8.  
  9. int counter = 0;
  10.  
  11. int main(void) {
  12. int *fubar = malloc(0);
  13.  
  14. assert(signal(SIGSEGV, segfault_handler) != SIG_ERR);
  15. assert(signal(SIGILL, segfault_handler) != SIG_ERR);
  16. assert(signal(SIGFPE, segfault_handler) != SIG_ERR);
  17.  
  18. for (;;) {
  19. printf("Assigning to fubar[%d]\n", counter);
  20. fubar[counter] = INT_MIN;
  21. counter = counter * 2 + 1;
  22. }
  23. }
  24.  
  25. void segfault_handler(int sig) {
  26. /* NOTE: Using printf inside a signal handler is also undefined behaviour */
  27. printf("Fault when counter is %d\n", counter);
  28. exit(EXIT_FAILURE);
  29. }
  30.  
Runtime error #stdin #stdout 0s 1964KB
stdin
Standard input is empty
stdout
Assigning to fubar[0]
Assigning to fubar[1]
Assigning to fubar[3]
Assigning to fubar[7]
Assigning to fubar[15]
Assigning to fubar[31]
Assigning to fubar[63]
Assigning to fubar[127]
Assigning to fubar[255]
Assigning to fubar[511]
Assigning to fubar[1023]
Assigning to fubar[2047]
Assigning to fubar[4095]
Assigning to fubar[8191]
Assigning to fubar[16383]
Assigning to fubar[32767]
Assigning to fubar[65535]
Fault when counter is 65535