C++ 指针, New, Delete 与内存分配

使用new来分配内存:

int *pn= new int;

int higgens;

int *pt=&higgens

delete 释放内存:

使用delete时, 要在后面加上指向内存块的指针

如 delete pt

注意:

delete 只能释放使用new 关键字创造出来的指针

int *pt=5

delete pt  //错误

如果new创建的是数组, 如

int *p = new int[10]

则在释放时, 代码应为

delete [] p

总是, 使用delete和new 时, 应注意一下规则:

不要使用delete 来释放 不是new 分配的内存

不要delete 同一块内存两次

如果使用new [] 则delete时也也应该为delete[]

 

数组与指针:

short tell[20]

直接对数组名取地址(&tell)时, 数组名被解释为整个数组的地址

而直接输出tell(cout<<tell) 才是数组第一个元素的地址 = tell[0]

这个区别体现在:

当&tell 的结果加1时, 指针移动20个地址

当tell 加1时, 指针移动2个地址

 

动态存储:

new 和 delete 运算符提供了一种比自动变量和静态变量更灵活的方法, 他们管理了一个内存池, 被称为自由存储空间,(堆) 这样做使得通过new生成的变量, 可以在一个函数重分配空间, 另一个函数中delete释放空间

数据的生命周期不完全受程序或函数的生存时间控制.

这种做法使的对内存有更大的控制权, 但是内存管理也更加复杂

 

如果new出的内存不delete, 会导致给原变量分配的内存不会自动释放, 但是也不能被继续使用.

即内存泄漏. 当应用程序的内存被耗尽, 出现内存耗尽错误, 程序崩溃,也会给同时运行在电脑上的其他软件造成伤害.

 

posted @ 2019-02-26 20:07  Derek丶D  阅读(3786)  评论(0编辑  收藏  举报