This if ForGroupBJ function. I saw the thread where Darky28 itself recommended this construction :
local group g = CreateGroup()
local unit u
...
set u = FirstOfGroup(g)
loop
exitwhen u = null
set u = FirstOfGroup(g)
call RemoveUnit(u) // for example
endloop
...
call DestroyGroup(g)
set g = null
set u = null
u=FirstOfGroup(g) can be inside the loop, before the exitwhen. also this wont leak (for what i know), setting u to null at the end is unneeded (it allready is) and it would make sense to have g as an auxiliar group, not using the main group.