retornando endereço da variável local [duplicado]

Duplicata Possível:
A memória de uma variável local pode ser acessada fora de seu escopo?

Estou tentando entender por que recebo essa saída para o programa abaixo

[hello] [0xbfde68f4]
[world] [0xbfde68f4]
[world] [0xbfde68f4]

O programa é

int main(void)
{
    char **ptr1 = NULL;
    char **ptr2 = NULL;

    ptr1 = func1();
    ptr2 = func2();
    printf(" [%s] [%p]\n",*ptr1, (void*)ptr1);

    printf(" [%s] [%p]\n",*ptr2, (void*)ptr2);

    printf(" [%s] [%p]\n",*ptr1, (void*)ptr1);

    return 0;
}

char** func1()
{
    char *p = "hello";
    return &p;
}

char** func2()
{
    char *p = "world";
    return &p;
}

Eu entendo que não é uma boa prática retornar o endereço das variáveis ​​locais, mas isso é apenas uma experiência.

questionAnswers(3)

yourAnswerToTheQuestion