Consider the following code (building with g++):

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

typedef struct {
    int a;
    int b;
    char c;
} memstr_t;

memstr_t *ptt_backup;

void mmm(memstr_t*& ptt)
{
    ptt = (memstr_t *)calloc(15, sizeof(memstr_t));
    ptt[0].a = 1;
    ptt[0].b = 2;
    ptt[0].c = 'c';
    ptt_backup = ptt;
}

void fff()
{
    free(ptt_backup);
}

int main(int argc, char *argv[])
{
    memstr_t *ptt;

    mmm(ptt);
    printf("%d %d %c\n", ptt[0].a, ptt[0].b, ptt[0].c);
    getchar();
    //fff();
    free(ptt); // same as fff()?
    printf("%d %d %c\n", ptt[0].a, ptt[0].b, ptt[0].c); //why works?
    getchar();
    return 0;
}

```

I don't understand:

1) Why I'm not getting segfault on the second print since I free the memory? I'm still getting the values which I assigned in `mmm()`

2) Are `free()` and `fff()` doing the same thing?