Beantwortung der Originalfrage: ja, die müssen freigegeben werden.
Wärst du auf neueren Delphi Versionen könntest du ReportMemoryLeaksOnShutdown := true; als erste Zeile der
dpr setzen und würdest Memoryleaks dann beim Programmende angezeigt bekommen.
Und TDictionary aus Generics.Collections wäre auch sicher eine einfache und brauchbare Lösung für deine Problemstellung.
Es fällt mir in letzter Zeit auf, dass einige Mitforisten nur noch das Ursprungsposting lesen und gar nicht mehr die schon gegebenen Antworten (auch die des Threaderstellers), in denen schon alles gesagt wurde.
Was ist das? Faulheit? Dummheit? Boshaftigkeit? Oder ein "Ich-will-auch-irgendwas-schreiben"?