在C++ Primer中文版(第三版)中的第340页,讲到指针pi的生命期和pi指向的对象的生命期之间的区别。它说指针pi本身是个全局域中声明的全局变量,pi得储存区在程序开始之前就被分配。且一直保存到程序结束。而pi指向的对象是在程序执行过程中遇到new才创建,在程序运行期间遇到delete表达式pi指向的内存就会被释放。
问题一:即使我在函数里面定义的指针,它也是全局变量,并且在程序开始前就被分配?
问题二:我对指针用表达式delete,也只能释放指针指向对象的内存空间,而不是指针本身,指针的空间要等到程序结束后才释放?
本人白思不得其解,望高手之点一二!
问题一:即使我在函数里面定义的指针,它也是全局变量,并且在程序开始前就被分配?
问题二:我对指针用表达式delete,也只能释放指针指向对象的内存空间,而不是指针本身,指针的空间要等到程序结束后才释放?
本人白思不得其解,望高手之点一二!
OnDraw()
{
double *p=new doubel[4*4];
......
......
delete[] p;
}
后来发现程序运行的时候,就是反复调用OnDraw()函数的时候,内存泄漏的很厉害,后来我把程序改为
OnDraw()
{
double p[4*4];
......
......
}
反而没有出现内存泄漏的情况。
后来看到C++ Primer中文版(第三版)中动态内存分配的时候,才产生以上疑问。
指针的空间是指指针也是一个对象,它也占内存空间
double p[4*4];这种定义当然不会有内存泄露,它只是栈中的一个临时变量,函数的栈操作会自动回收它的空间。
如果你说 delete[] p 不行,就说不过去了。
又不是像java那样,只能在堆里面分配空间,最后依赖垃圾收集来处理,是不是还有别的原因(其它代码)?