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, 会导致给原变量分配的内存不会自动释放, 但是也不能被继续使用.
即内存泄漏. 当应用程序的内存被耗尽, 出现内存耗尽错误, 程序崩溃,也会给同时运行在电脑上的其他软件造成伤害.