As far as I can remember the ReadSections does an Assign to the other object therefore it needs to exist

[pascal]procedure readcontentini;
var Ini: TIniFile;
i: integer;
begin
Ini := TIniFile.Create('inicontent.ini');
IniSections := TStringList.Create;
IniValues := TStringList.Create;
Ini.ReadSections(inisections);
for i := 0 to ((inisections.Count) - 1) do begin //<-- here
Ini.ReadSectionValues(inisections[i], inivalues);
end;
Ini.Free;
end; [/pascal]

But note that IniValues will only Contain the values from the Last Section.