Escrevi um parágrafo, no endereço abaixo, o grande bug do Delphi, não precisa se preocupar em ler, vou repetir aqui.
Mas acho que você pode dar uma olhada nos comentários abaixo.
http://www.csdn.net/Develop/read_article.asp?id=12525
O código original é assim,
Procedimento TForm1.Button1Click(Remetente: TObject);
var
strings:TStringList;
começar
se não for atribuído (strings), então
começar
strings :=TStringList.Create;
// ShowMessage('sfdasfd'); Se você adicionar esta ou aquela frase, não terá problema, caso contrário, haha.
fim;
strings.free;
cadeias de caracteres := nulo;
fim;
Na verdade, há apenas uma linha na qual quero me concentrar: strings.Free;
Mas acontece que existem outros códigos que causam muitos problemas desnecessários. Já enfatizei isso várias vezes, mas o código principal ainda é coberto por outras guirlandas. E isso sempre causa mal-entendidos, então
Eu reescrevo o código da seguinte maneira:
procedimento TForm1.Button1Click(Remetente: TObject);
var
strings:TStringList;
começar
strings.free;
fim;
Na verdade, a classe TStringList neste código pode ser substituída por qualquer classe que você queira experimentar.
Dessa forma, se você usar a janela de observação da CPU você poderá encontrar coisas, mas se não usar, basta pressionar Ctrl+F2
Encerre o programa.
Não sei se esse título também significa algo estúpido, mas de qualquer maneira está em chinês. Você e eu entendemos.
Na verdade, o objetivo deste código é lembrá-lo de prestar atenção ao uso correto dos objetos. Quanto ao motivo do erro neste código,
Acho que é mesmo uma omissão do compilador, mas se você não tem nenhuma pesquisa sobre a estrutura de memória de classes e objetos, sugiro que: primeiro, deixe pra lá, e segundo, estude.