退出程序很难吗?为什么小弟我这么做是不行的,应该如何做呢

退出程序很难吗?为什么我这么做是不行的,应该怎么做呢?
procedure TForm1.Button1Click(Sender: TObject);
var
p:PChar;
begin
  GetMem(P,100);
  if P=nil then
  Application.Terminate;
  self.Caption:=p^;
end;

就这么几行的代码,却是错误的,程序每次执行都会异常。“self.Caption:=p^”一定会执行到,执行“Application.Terminate”程序并不会立刻结束。
那在一个希望应用程序立刻退出的情况,难道调用Halt?但是在《Delphi技术手册》中明确说明不应该调用Halt。

------解决方案--------------------
同意一楼

Application.Terminate;
是用消息的方式退出程序,如果后面还有别的语句,而没有Exit之类的话,
得执行完后面的语句,才能处理退出消息。

执行下面代码看看,就可以发现消息提示框会出现

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate;
ShowMessage('OK');
end;