Yo soy de los que piensa que quien crea las cosas es quien debe ser resposable de destruirlas, así que yo optaría por crear y destruir el Stream en el mismo sitio.
Cambia la definición a algo como esto:
Código Delphi
[-]procedure DameQRIMG(QRText:String; QRImage:TMemoryStream);
Y la llamada de esta forma...
Código Delphi
[-] ms := TMemoryStream.Create;
try
DameQRIMG(QRText:String; QRImage:TMemoryStream);
... Hacer lo que sea con la imagen
finally
FreeAndNil(ms);
end;
Y en el procedimiento usar el parámetro
QRImage, en lugar del result.