动态数组一旦分配就不可改范围,但为什么这样的代码可以运行呢?解决方案
动态数组一旦分配就不可改范围,但为什么这样的代码可以运行呢?
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下了干嘛,好大的,登入上去看看就好了啊。
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下了干嘛,好大的,登入上去看看就好了啊。