#include <stdio.h>
#include <stdlib.h>

// warning: this program contains a TON of bugs; its goal
// is to demonstrate various ways you might corrupt memory
int main(int argc, char **argv) {
  int a[2];
  int *b = malloc(2*sizeof(int));
  int *c;

  a[2] = 5;   // assign past the end of an array
  b[0] += 2;  // assume malloc zeroes out memory
  c = b+3;    // mess up your pointer arithmetic
  free(&(a[0]));  // pass a pointer to free( ) that wasn't malloc'ed
  free(b);
  free(b);    // double-free the same block
  b[0] = 5;   // use a free()'d pointer

  // any many more!
  return EXIT_SUCCESS;
}