+ -
当前位置:首页 → 问答吧 → 关于delete [] array;

关于delete [] array;

时间:2011-12-06

来源:互联网

int main()
{
  int n;
  cin>>n;
  int *array = new int [n];
  for( int i=0; i<n; i++ )
  array[ i ] = n-i;
  for( int i=0; i<n; i++ )
  cout<<array[ i ]<<" ";
  delete [ ] array;
  //array[ 0 ] = 10;
  for( int i=0; i<n; i++ )
  cout<<array[ i ]<<" ";
  return 0;
}
// delete 后,还可以继续使用数组?是不是说,只是释放内存而已!

作者: zdxing007   发布时间: 2011-12-06

释放的只是array所指的内容空间而已。指针还是在的。
delete后在cout数组的内容输出的只能是垃圾而已

作者: chenph_210   发布时间: 2011-12-06

delete的作用是告诉操作系统,这块内存你用完了,可以被分配给别的程序或者下一次重新分配使用了。因而delete后应将指针赋值NULL,套不然可能导致不可预料的问题

作者: zshtang   发布时间: 2011-12-06

引用 2 楼 zshtang 的回复:

delete的作用是告诉操作系统,这块内存你用完了,可以被分配给别的程序或者下一次重新分配使用了。因而delete后应将指针赋值NULL,套不然可能导致不可预料的问题

是的,要赋值于NULL。我调试过,要是不这样,还是一样可以输出数组。
  但很多程序并没有赋值于NULL。

作者: zdxing007   发布时间: 2011-12-06

总之不要指望delete 帮你打点好一切就行了,如果你用完了delete但不把指针赋值为空,那么在if(p)的时候得不到你想要的结果,程序就会出问题。如果程序没有给指针赋值为NULL,要么是这个程序只是用来验证一些算法和数据结构的知识,并不是做一个实际的工具,所以不用考虑那么多,或者直接的说不规范。

代码简单的时候怎么都无所谓,但若复杂了,出了问题可能会花费你很多时间。就是这样一个问题

作者: zshtang   发布时间: 2011-12-06

在你没有释放之前
数组指针是一个指针常量 指向你申请的一段内存。
delete后你就可已对他随便操作了。

作者: l460602540   发布时间: 2011-12-06

这个就像我现在申请了一个教室,指针就是密码锁的钥匙,delete就是告诉学校我把教室还你了,别人申请就可以用了。而如果该教室未被别人使用,而你又拥有密码,你自然还是可以进入教室的
(借用,大神的例子)

作者: l460602540   发布时间: 2011-12-06

引用 6 楼 l460602540 的回复:
这个就像我现在申请了一个教室,指针就是密码锁的钥匙,delete就是告诉学校我把教室还你了,别人申请就可以用了。而如果该教室未被别人使用,而你又拥有密码,你自然还是可以进入教室的
(借用,大神的例子)

++

作者: zl6511130   发布时间: 2011-12-06