new运算符可以自动计算所申请空间的大小,而malloc()函数则必须由程序员指出所需申请分配空间的大小。
#include<iostream>
using namespace std;
int main()
{
	char *p1;
	int *p2;
	int *p3=new int (14);
	int *p4=new int [3];
	p1=new char;     //new一个整型数,并将该整型数的地址赋值给p1
	p2=new int (10);//new一个初值为200的整型数,并将该整型数的地址赋给p2
	*p1=97;
	for(int i=0;i<3;i++)
	{
		cin>>*(p4+i);
	}
	cout<<*p1<<endl;
	cout<<*p2<<endl;
	cout<<*p3<<endl;
	
	for(int i=0;i<3;i++)
	{
		cout<<*(p4+i)<<" ";
	}
	cout<<endl;
	delete p3;
	delete p2;
	delete p1;
	delete []p4;
	p1=NULL;
	p2=NULL;
	p3=NULL;
	p4=NULL;
	system("pause");
	return 0;
}2.delete只能用来释放用new申请分配的动态内存空间;反之,new申请的动态内存空间必须用delete来释放。
  delete与new必须有对应的关系。
3.delete执行之后,指针所指向的内存空间就被释放了,而指向该动态内存区域的指针变量本身并不会因为delete有任何改变。
4.delete之后,不对指针变量做任何处理,就会造成“指针悬挂”;
5.指针变量声明后没有进行初始化就通过它操作内存空间,则可能制造一个“野指针”;
6.关于指针和动态内存要特别注意:
指针消亡了,并不代表它所指向的动态内存会被自动释放,自动消亡;
动态内存被释放了,并不代表指向该动态内存的指针变量会消亡或自动变成NULL;
做到以下几点:
1.定义指针变量的同时初始化。如不初始化就一定要将其设置成NULL,避免该指针指向一个不确定的地方,引发误操作,这是非常危险的。
一旦把它置成NULL,误用它就不会造成太大问题;
2.delete指针以后,第一时间将其设置为NULL。即使是一个马上就要消亡的局部指针变量,也可立即将其置成NULL。养成良好的习惯是避免错误的有效方法;
3.当指针指向数组时,一定谨慎防止指针越界操作;
4.避免用指针传递桟内存,避免返回一个即将自动消亡的局部变量或局部对象的地址。
桟内存中的局部变量和局部对象都不能跨函数生存,要注意它们的生存周期。
原文地址:http://blog.csdn.net/lanzhihui_10086/article/details/39736969