Erro de violação de acesso ao reverter uma string c ++ [duplicate]

Duplicata Possível:
Por que recebo uma falha de segmentação ao gravar em uma string?

A seguinte função simples deve inverter uma matriz de caracteres no lugar.

void reverse(char* str)
{
    char* last = str;

    // find end of the string
    while(*last) {
        ++last;
    }

    // swap characters until the pointers meet in the middle
    while(str < last)
    {
        --last; 
        char temp = *str;
        *str = *last;
        *last = temp;
        ++str;
    }
}

int main()
{
    char* a= "Hello";
    reverse(a);
    return 0;
}

O código compila. Mas isso gera um erro de tempo de execução sobre violação de acesso. Segundo o debugger o culpado é a linha abaixo:

char temp = *str;

Alguma idéia por que isso acontece?

questionAnswers(1)

yourAnswerToTheQuestion