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];
  }

则申请的内存才会还给系统,为什么??请知道的人指点一下,谢谢

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础
  • Linux系统管理技术手册(第2版)


2个回答

因为这句话:

p[i] = new char[72];

p[i]指向的是个数组,所以需要用delete[] p[i];


因为你定义的是char*p[600000]; 所以p[600000]是一个整体了。

这是一种内存分配策略. 知道有这么回事就行了.