
// https://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc

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

#define CHILD      0
#define FORKERROR -1

int main( int argc, char *argv[] ) {
    char *array;
    array = malloc( 20 );
    
    strcpy( array, "Hello" );

    switch( fork() ) {
    case CHILD:
      printf( "Child array: %s\n", array );
      strcpy( array, "Goodbye" );
      printf( "Child array: %s\n", array );
      free( array );
      break;

    case FORKERROR:
      printf( "Error with fork()\n" );
      break;

    default:
      printf( "Parent array: %s , sleep 1s.\n", array );
      sleep(1);
      printf( "Parent array: %s\n", array );
      free( array );
    }

    return 0;
}
