O programa trava ao desalocar um array de caracteres

Quando eu executo o .exe sendo criado com o código abaixo no modo de depuração, ele mostra alguma falha de declaração eo programa trava Mas quando eu executo o mesmo exe criado a partir do modo de liberação do código abaixo, está funcionando bem.

Por favor, ajude a identificar por que estou recebendo a falha de declaração no modo de depuração, mas não no modo de liberação.

#include<iostream>
using namespace std;
#include<string.h>

void main()
{
    char *buf  = new char[5];   //pre-allocated buffer
    buf = "Hello";
    delete [] buf;
    getchar();
    //cout<<buf;
    //string *p = new (buf) string("hi");  //placement new
    //string *q = new string("hi");  //ordinary heap allocation
}

questionAnswers(6)

yourAnswerToTheQuestion