free与delete的区别

1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间

2. delete [] 用于释放 new [] 分配的空间

3. delete 释放空间的时候会调用 相应对象的析构函数

     顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存

4. 调用free 之前需要检查 需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULL

5. free 和 delete 不能混用,也就是说new 分配的内存空间最好不要使用使用free 来释放,malloc 分配的空间也不要使用 delete来释放

6.

#include<iostream>
using namespace std;
int main()
{int *p;
p=new int;
delete p;
*p=4;
cout<<*p;
return 0;
}

delete已经删除了内存了,为什么下面还可以为*P赋值呢,哪有内存呢? 

delete p 虽然释放了内存,但指针p还是指向原来的地址,如果还使用指针p,那p就是野指针。用delete释放后,应 p = 0; 表示现在不指向任务地址。为0的指针是可以检测的.if (p != 0)*p = 10;

7.

int * p=malloc(sizeof(int)*10);  //p指向某一内存块的首地址
p++;                             //p指正向后移sizeof(int)个字节,指向一个新地址
free(p);                         //释放新地址以后的空间     

posted @ 2014-11-15 10:42  龙泽一狼  阅读(1046)  评论(0编辑  收藏  举报