在对栈空间的操作时,C++常使用new与delete来进行。
对于此操作符,有int *p = new int;
Int *p = new int[n];
后者常用语做动态申请内存空间使用,称为动态数组。对应的delete为
delete p;
delete []p;
这两者之间的关系是什么呢,delete是直接删除p所指向的内存空间,而delete[]p则是先计算p所对应空间有多少个变量或对象,然后全部释放或调用相应的析构函数。
若使用Int *p = new int[n];但在释放空间时使用delete p;则只是释放了第一个变量空间。
二维数组经常需要使用指针的指针,即二重指针进行申请空间的操作。
double **speedX;
speedX = new double *[6];
for (i=0;i<6;i++)
{
speedX[i] = new double[conncetNum];
}
释放时则应、
for (i=0;i<6;i++)
{
delete []speedX[i];
}
delete []speedX;
因为所对应的speedX[i]与speedX都是对应多个对象,所以应使用delete[]。今天写的程序中正式因为对speedX只是调用delete而造成内存泄露。