我们都知道指针用完了必须释放掉,不然会产生内存泄漏,但是得注意一个问题。
https://www.cnblogs.com/uniqueliu/archive/2011/07/18/2109778.html
上面这个博客写的很清晰,当用了一个指针 p,如果只用 delete p 来释放的话,系统只会将 p 指向的内存地址删除掉,p本身并不会被删除或是释放。所以 delete p 完了以后可以 p = NULL 来进行对指针 p 的释放。
int* p = new int(1);
通过这样定义一个指针的话,是在堆上分配一个内存存放int类型的数据,并初始化为1,并在栈上分配一个内存给p,并且p的值是堆上那个内存的地址。
使用指针的时候记得一定要*p这样使用,这样才能读取到指向的地址上的内容。可以用局部变量来初始化一个指针,例如:
vector<int*> pInt;
for (int i = 0; i < 10; i++)
{
int *a = new int;
*a = i;
pInt.push_back(a);
}
但是在这里并不能用 i 来进行
pInt.puss_back(i);
不能这么操作,因为 i 在这个循环中只有一个地址,那么push进去的所有值都指向这同一个地址,