title: Why most Delphi examples use FillChar() to initialize records?
body: <p>I just wondered, why most Delphi examples use FillChar() to initialize records. </p>
  
  <pre><code>type
    TFoo = record
      i: Integer;
      s: string; // not safe in record, better use PChar instead
    end;
  
  const
    EmptyFoo: TFoo = (i: 0; s: '');
  
  procedure Test;
  var
    Foo: TFoo;
    s2: string;
  begin
    Foo := EmptyFoo; // initialize a record
  
    // Danger code starts
    FillChar(Foo, SizeOf(Foo), #0);
    s2 := Copy("Leak Test", 1, MaxInt); // The refcount of the string buffer = 1
    Foo.s = s2; // The refcount of s2 = 2
    FillChar(Foo, SizeOf(Foo), #0); // The refcount is expected to be 1, but it is still 2
  end;
  // After exiting the procedure, the string buffer still has 1 reference. This string buffer is regarded as a memory leak.
  </code></pre>
  
  <p>Here (<a href="http://stanleyxu2005.blogspot.com/2008/01/potential-memory-leak-by-initializing.html" rel="noreferrer">http://stanleyxu2005.blogspot.com/2008/01/potential-memory-leak-by-initializing.html</a>) is my note on this topic. IMO, declare a constant with default value is a better way.</p>