¿Free () está poniendo a cero la memoria?

Hasta hoy vivía creyendo que llamarfree() en el espacio de memoria lo libera para su posterior asignación sin ninguna otra modificación. Especialmente, considerandoesta pregunta SO eso establece claramente quefree() NO pone a cero la memoria.

Sin embargo, consideremos este fragmento de código (test.c):

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

int main()
{
    int* pointer;

    if (NULL == (pointer = malloc(sizeof(*pointer))))
        return EXIT_FAILURE;

    *pointer = 1337;

    printf("Before free(): %p, %d\n", pointer, *pointer);

    free(pointer);

    printf("After free(): %p, %d\n", pointer, *pointer);

    return EXIT_SUCCESS;
}

Compilación (tanto GCC como Clang):

gcc test.c -o test_gcc
clang test.c -o test_clang

Resultado:

$ ./test_gcc 
Before free(): 0x719010, 1337
After free(): 0x719010, 0
$ ./test_clang
Before free: 0x19d2010, 1337
After free: 0x19d2010, 0

¿Por que es esto entonces? ¿Vivía en una mentira todo este tiempo o entendí mal algunos conceptos básicos? ¿O hay una mejor explicación?

Alguna información técnica:

Linux 4.0.1-1-ARCH x86_64
gcc version 4.9.2 20150304 (prerelease) (GCC)
clang version 3.6.0 (tags/RELEASE_360/final)

Respuestas a la pregunta(7)

Su respuesta a la pregunta