指针的内存分配和释放

一   new运算符
1. 在运行阶段为一个int 值分配一个未命名的内存,并使用指针来访问这个值。
2, new将找到一个长度正确的内存块,并返回该内存的地址。
3, int *pn=new int;      ( new int 告诉程序,需要适合储存int 的内存,new运算符根据类型来确定需要多少字节的内存。然后它找到这样的内存,返回其地址。接下来将地址赋给pn,pn是被声明为指向int的指针。现在pn是地址,*pn是储存那里的值。)
4,使用delete时,后面要加上指向内存块的指针。这些内存块最初使用new分配的。
5, int *ps =new int ;
.......
delete ps;  (这将释放ps指向的内存,但不会删除ps指针ps本身。所以可以将ps重新指向另一个新分配的内存块。)
6,不要尝试释放已经释放的内存块,不能使用delete来释放声明变量所获得的内存。
  例如:int *ps =new int ;
           delete ps;
           delete ps;    //not ok
           int jugs =5;
           int *pi =&jugs;
           delete pi;   //not alloowed
  【注意】只能是用delete 来释放使用 new 分配的内存,然而,对空指针使用delete是安全的。
二 使用 new 来创建动态数组
   静态联编: 如果通过声明来创建数组,则在程序被编译时将它分配内存空间。不管程序最终是否使用数组,都占用内存,在编译时给数组分配内存被称为 静态联编。
   动态联编: 使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在运行的时候选择数组的长度。

1.   int *p=new int [10];   (new运算符返回第一个元素的地址,该地址被赋给指针p )
2 .  当程序使用完new分配的内存块时,应使用delete释放他们。
      delete [] p;    // 方括号告诉程序,应释放整个数组,而不是指针指向的元素。
3.   【注意】 不要使用delete来释放不是new分配的内存。
                   不要用delete释放同一内存块两次。
                   如果用 new []为数组分配内存,则应使用 delete[]来释放

                   对空指针使用delete是安全的。

 

//4.    举例:

#include<iostream>
int main()
{
 using namespace std;
 int *p=new int [3];
 p[0]=4;
 p [1]=3;
 p [2]=8;
 cout <<p[1]<<"\n";
 p+=1;
 cout<<p[1];
 p-=1;
 delete [] p;
 return 0;
 

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值