C内存管理—— delete释放内存的时效性delete释放之后,内容是立即回收的吗?
# includeiostreamusingnamespacestd; int main () {int *map; int i=10; wile(I-- ) ) { map=new int[20]; map[i]=i; cout map[i]endl; //1 delete [ ]映射; cout map[i]endl; //2 }}运行结果:
9887765543219082-9862922081000以上内容表明,删除后并不会立即回收内存。
实际上,在调用delete后,此内存表示可以在操作系统中重新分配,但指针仍然指向此内存。 虽然指针指向原来的位置,但由于其内存随时都有可能被回收,因此输出结果存在不确定性。 因此,我们通过在删除的同时将指针设为NULL,在下次调用该指针时,用if(null==p )判断指针的状态,不使用野指针。