请问一个有关模板类的·有关问题 下面被注释掉的for循环为什么不能运行

请教一个有关模板类的·问题 下面被注释掉的for循环为什么不能运行
#include<iostream>
using std::cout;
using std::endl;

#include<stdexcept>
using std::runtime_error;

#include<cstdlib>//useful for malloc realloc
using std::malloc;
using std::realloc;

template<typename T>
class my_vector
{
private:
        T*array;
        unsigned size;
        unsigned block_size;
public:
        my_vector():array((T*)malloc(sizeof(T)*block_size)),size(0),block_size(5){};
        my_vector(unsigned bsz):array((T*)malloc(sizeof(T)*bsz)),size(0),block_size(bsz){}
        ~my_vector(){if(array)free(array);}

        void push_back(const T&elem)
        {
                if(size==block_size)
                {
                        block_size*=2;
                        T *new_array=(T*)realloc(array,block_size*sizeof(T));
                        if(new_array!=NULL)
                                array=new_array;
                        else
                        {
                                free(array);
                                array=NULL;
                                throw runtime_error("Out of memory.");
                        }
                }
                array[size++]=elem;
        }

        T& operator[](unsigned i){return array[i];}
        const T& operator[](unsigned i)const{return array[i];}
        unsigned get_mem_size(){return block_size*sizeof(T);}
};

template<>
class my_vector<bool>
{
private:
        int* array;
        unsigned size;
        unsigned block_size;

        static const unsigned seg_size=sizeof(int)*8;
public:
        my_vector(unsigned bsz=1):array{(int*)malloc(sizeof(int)*bsz)},size(0),block_size(bsz){}
        ~my_vector(){if(array)free(array);}

        void push_back(bool elem)
        {
                if(size==block_size*seg_size)
                {
                        block_size*=2;
                        int* new_array=(int*)realloc(array,block_size*sizeof(int));
                        if(new_array!=NULL)
                                array=new_array;
                        else
                        {
                                free(array);
                                array=NULL;
                                throw runtime_error("Out of memory.");
                        }
                }
                set(size++,elem);
        }

        void set(unsigned i,bool elem)
        {
                if(elem)
                        array[i/seg_size] |=(0x1<<(i%seg_size));
                else
                {
                        array[i/seg_size] &=~(0x1<<(i%seg_size));
                }
        }

        bool operator[](unsigned i)const
        {
                return (array[i/seg_size] & (0x1<<(i%seg_size)))!=0;
        }

        unsigned get_mem_size()const{return sizeof(int)*block_size;}

};



int main()
{
        my_vector<double> m_v0(10);
        for(size_t i=0;i<50;i++)
                m_v0.push_back(i);

        for(size_t i=0;i<50;i++)
                cout<<m_v0[i]<<" ";
        cout<<endl;
        cout<<"Done!\n";
        my_vector<double> m_v1;
        m_v1[0]=10000;
        cout<<m_v1[0]<<endl;
        m_v1.push_back(1000);
        cout<<m_v1[1]<<endl;
        for(size_t i=0;i<3;i++)
                m_v1.push_back(i);
        for(size_t i=0;i<5;i++)
                cout<<m_v1[i]<<" ";
        cout<<endl;
        m_v1.push_back(1000000);
        cout<<m_v1[5]<<endl;
        m_v1.push_back(100000000);

        for(size_t i=0;i<6;i++)
                cout<<i<<" "<<m_v1[i]<<" ";
        cout<<endl;


        for(size_t i=1;i<4;i++)
                m_v1.push_back(i);

        for(size_t i=0;i<4;i++)
                cout<<m_v1[i]<<" ";
        cout<<endl;
        cout<<"Done!\n"<<endl<<endl;

        my_vector<char> vi(2);
        my_vector<bool> vb(2);


        for(size_t i=0;i<20;i++)
        {
                vi.push_back('a'+i);
                vb.push_back((i%4)==0);
        }

        cout<<vb[0]<<endl;
        cout<<vb[1]<<endl;
        cout<<vb[2]<<endl;
        cout<<vb[3]<<endl;
        cout<<vb[4]<<endl;
        cout<<vb[19]<<endl;
        cout<<"Done!\n";

        /*
        for(unsigned i=0;i<2;i++)
        cout<<vb[i]<<endl;
        */

        cout<<"Done!\n";
        cout<<"MemSize of my_vector<char> is "<<vi.get_mem_size()<<endl;
        cout<<"MemSize of my_vector<bool> is "<<vb.get_mem_size()<<endl;

        for(size_t i=0;i<20;i++)
                cout<<" "<<vi[i];
        cout<<endl;

        /*
        for(size_t i=0;i<20;i++)
        cout<<vb[i];
        cout<<endl;
        */


        return 0;
}

------解决思路----------------------
 my_vector(unsigned bsz=1):array{(int*)malloc(sizeof(int)*bsz)},size(0),block_size(bsz){}
构造函数写错了:
 my_vector(unsigned bsz=1):array((int*)malloc(sizeof(int)*bsz)),size(0),block_size(bsz){}

还有一个错误:
my_vector():array((T*)malloc(sizeof(T)*block_size)),size(0),block_size(5){};
初始化array的时候block_size还没有赋值,所以array的构造是有问题的