在C++中比较麻烦的就是对内存的动态操作,new后必须delete,否则就造成内存泄露,假如没有正确地new,就会造成空指针或野指针的情况,导致数据被破坏,程序发生异常.
先看一段代码
申请内存:
int** a;
a = new int*[10];
for (j = 0; j< 10; j++)
{
a[j] = new int[5];
}
int** a;
a = new int*[10];
for(j = 0; j < 10; j++)
{
a[j] = new int;
}
for(i = 0; i < 10; i++)
{
delete[] a[i];
a[i] = NULL;
}
delete[] a;
a = NULL;
}
申请的时候,一个是a[j] = new int[5];一个a[j] = new int;首先正确的是a[j] = new int[5]。错误的写法是a[j] = new int。因为后者没有说明具体有多少元素,在后面的操作的时候,会指向野指针,同时在调用delete的时候,也会发生异常。