А для чего проходить два раза одно и тоже место?
delete g_hReward;
g_hReward = new ArrayList(ByteCountToCells(64));
if(config.JumpToKey("reward_items") && config.GotoFirstSubKey())
{
static char sBuffer[128];
do
{
if(config.GetSectionName(sBuffer, sizeof(sBuffer)))...