#include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <assert.h> void do_child_badness ( char* p ) { /* Free it a second time */ free(p); } void do_parent_badness ( char* p ) { /* Do a write off the end */ p[10] = 42; } int main ( void ) { pid_t child; char* p = malloc(10); assert(p); free(p); /* parent does something bad */ p[5] = 22; child = fork(); assert(child != -1); /* assert fork did not fail */ if (child == 0) { /* I am the child */ do_child_badness(p); } else { /* I am the parent */ do_parent_badness(p); } return 0; }