C++ 求数组元素的所有子集问题

以下是我写的程序,改了好久到底不知道是哪里出错了。
我怀疑是elements_count和curr_index这两个变量没有控制好。

 /*Subset Generation.*/
/*其实就是一个完全二叉树忽略根节点的的深度优先遍历。*/
/**
    elements_count : 数组的元素个数。
    subsets : 输出参数。输出所有子集的数组。每个元素的形式为010 001 100等。
    subsets_size : subsets 的长度(我感觉用不着把这参数传进来)。
    curr_index : 用于递归。代表生成的第几个子集。是数组subsets的下标。
*/
void subset(int elements_count, int*& subsets, uint16_t subsets_size, uint16_t curr_index = 0)
{
    /*向每一个子集后添加0 / 1*/
    for (int i = 0 ; i < 2 ; i++)
    {
        subsets[curr_index] |= i;
        /*是否将subsets[curr_index]的所有0、1添加完。*/
        if (elements_count > 1)
        {
            /*左移1位准备下次处理。*/
            subsets[curr_index] <<= 1;
            /*递归。*/
            subset(elements_count - 1, subsets, subsets_size, curr_index);
        }
        /*如果完成,则curr_index++,处理下一个元素。*/
        else
        {
            ++curr_index;
            subsets[curr_index] = 0;
        }

        /*如果curr_index已经达到了subsets_size,则表示所有子集已经生成。*/
        if (curr_index >= subsets_size)
        {
            return;
        }
    }

}