您的位置:首页 > 编程语言 > C语言/C++

C++中new和delete的用法注意。

2016-07-20 21:11 399 查看
         作为计算机方面刚入门的小菜鸟,今天第一写博客,算是比较鸡冻了。前几天做导师分配的一个小活的时候,一个bug自己调试了好久,后来发现是一个地方用new和delete出现了问题。所以今天就把我认为用到new和delete时需要注意的地方写下吧。

        1、new是在堆中分配一段内存,堆中的内存在函数或者代码块执行结束后不会立即释放,new开辟的内存必须通过delete来释放。new和delete是一对。用new开辟的内存必须用delete来释放。如果不是放,在整个程序执行结束后,会由系统自动收回。同时,用delete释放后,还必须将内存的指针置为NULL,不然会产生“野指针”,就是指向垃圾内存的指针。

        2、在图像中经常遇到而且二维数组。二维数组的内存块的释放如下:

#include<iostream>
using namespace std;
void main()
{
int **a = new int *[1000];
for (int i = 0; i < 1000; i++)
{
a[i] = new int[10000];
}
for (int i = 0; i < 1000; i++)
{
delete[] a[i];
a[i] = NULL;
}
delete[] a;
a = NULL;

if (a != NULL)
{
a[1][2] = 0;
}

cout << "completed" << endl;
cin.get();
}
释放内存的时候注意:必须先释放二级内存,比如上述中的a[i],释放之后还需要将其置为NULL。同时需要主要的是,二级内存释放完毕后,还需要释放一级内存,同时将其置为NULL,就是上述例子中的 a = NULL.


3、在后面如果需要使用前面的内存的话,可以判断下,内存名是否是NULL,如果不是则可以使用,是,则证明该内存已经被释放,不能再使用。

4、New新开辟的内存是在堆中的,只有整个程序执行结束后,才会被系统自动收回。平时一般的变量和指针,都是存在栈中的,函数执行结束,相关的内存就会被释放。
5、特别注意,只有用new开辟的内存才能用delete释放,否则会出错。比如:用delete去释放一个定义好的数组,程序会出错,但是又不会指出错问题的地方,比较蛋疼。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: