动态数组一旦分配就不可改范围,但为什么这样的代码可以运行呢?解决方案

动态数组一旦分配就不可改范围,但为什么这样的代码可以运行呢?
VC6里面的console程序:

.......
int   *p   =   new   int   [];                                         //这个定义不报错
for(i=0;   i <15;   i++)*(p+i)=i*5;                     //给动态数组赋值
for(i=0;   i <15;   i++)cout < <*(p+i) < < "   ";       //打印出来
cout < <endl;

for(i=15;   i <30;   i++)*(p+i)=i*5;                   //给动态数组添加更多的值
for(i=15;   i <30;   i++)cout < <*(p+i) < < "   ";     //再打印出来
cout < <endl;
.......

运行结果一切正常。。。。。
晕啊,如果这样可以,谁还在定义动态数组的时候对它进行初始化、设定边界啊。。。。。

------解决方案--------------------
运行结果一切正常 说明你人品好
------解决方案--------------------
不报错不表示没有错

实际上静态数组越界使用也经常不报错的.

但这样用实际上就在修改指针指向的内存,这个内存只有系统知道它是用来干什么的
------解决方案--------------------
C 里面有 ralloc, C++ 里好象的确是没有对应的东西啊。 混用 C 和 C++ 又不太合适。 我觉得重新分配块大点的, 拷贝过去是个惯用的办法。
------解决方案--------------------
就是记录怎么分配 heap 的。 MSDN下了干嘛,好大的,登入上去看看就好了啊。