问一个linux下面c++ 内存分配的有关问题

问一个linux下面c++ 内存分配的问题
char*p[600000];  
  for ( int i=0; i<600000; i++ )
  {
  p[i] = new char[72];
  memset(p[i],0,72);
  }
如果释放的时候
  for ( int i=0; i<400000; i++ )
  {
  delete [] p[i];
  }
所有的内存都不会换给系统,为什么
如果
  for ( int i=0; i<600000; i++ )
  {
  delete [] p[i];
  }
则申请的内存才会还给系统,为什么??请知道的人指点一下,谢谢

------解决方案--------------------
因为你开辟了600000个char[72],只释放了400000个。

有问题吗?
------解决方案--------------------
因为你定义的是char*p[600000]; 所以p[600000]是一个整体了。
------解决方案--------------------
这是一种内存分配策略. 知道有这么回事就行了.
------解决方案--------------------
说说你必须用400000不用600000的理由
------解决方案--------------------
不知道。
不过至少,并不是说你delete或者free一个东西,它的内存马上就真得还给系统了,这肯定取决于内存管理的策略。
------解决方案--------------------
每一个new动态内存都要用delete来释放,当然对象能够能自动调用其析构函数释放。

------解决方案--------------------
自己new的空间存放是在堆区的, 这片区域是有程序员管理的,系统不会做动作, 所以你new出来的空间,也要自己释放,要不就会内存泄露了。
------解决方案--------------------
new 多少就释放多少! delete堆内存会在你真正不用的时候释放吧?个人感觉!