结构体里数组输出越界

typedef struct _base
{
int vec[4];
int size;
void init()
{
size = 4;
for(int i=0; i<size; i++)
vec[i] = i+1;
}
void show()
{
for(int i=0; i<=size; i++)
std::cout<<"vec["<<i<< "] is \t"<<vec[i]<<std::endl;
}
}base;
int main()
{
base b;
b.init();
b.show();
return 0;
}
结构体里数组在初始化时并未越界,输出的时候越界,为什么这段代码的返回值里vec[4]=4?

typedef struct _base
{
    int vec[4];
    int size;
    void init()
    {
        size = 4;
        for(int i=0; i<size; i++)
        vec[i] = i+1;
    }
    void show()
    {
        for(int i=0; i<=size; i++)
            std::cout<<"vec["<<i<< "] is \t"<<vec[i]<<std::endl;
              // 因为vec[4]实际上是size,请看两个值的地址是一样的
         std::cout << "vec[4] Address-> " << &vec[4] << std::endl;
         std::cout << "size Address -> "   << &size << std::endl; 
             /********************************************************/

    }

}base;
int main()
{
base b;
b.init();
b.show();
return 0;
}