关于指针和句柄的一些小记

前不久,面试被问到关于迷途指针和空指针的关系;见下:

int main(){

char *p="abcde";

std::cout<<*p<<std::endl;

delete p;//在这个时候,系统会释放掉p指向的内存,但是p指向的这块地址还存在,当他被其他程序段使用后,我们再次不小心的使用p后,这块地址的数据

就有可能被覆盖改变,发生意想不到的后果。

char *q="xxxxxx";

std::cout<<*q<<std::endl;

*p="aaa";

std::cout<<*q<<std::endl;//这时*q指向的内存会被*p覆盖,不再是xxxxxx,有可能是aaaxxx;

retutn 0;

}

上面的p就是一个迷途指针,这种错误在C++中往往是致命的,通常的避免方法是在delete p以后加上一句,p=NULL或者p=0;即将p空指针化,这样做其实并不能完全保证没有错误,但是至少可以在有问题时,顺利排查出错误。

 

关于指针和句柄,最简单的区别就是各自的定义,指针往往是指向对象的物理首地址,而句柄这时windows系统中指向对象指针的指针。

在windows系统中,系统对程序请求的内存工作机制叫虚拟内存管理,简单讲就是动态的管理固定的内存,使内存的大小可以随着程序的需要变化,当不够时就会有系统虚拟化出一部分来满足需求。OK,入题。在程序中对象的内存管理上,win系统中的不同对象的内存地址不是一成不变的,而是实时变化的。所以通过指针来访问对象是不可行,这就需要句柄来完成这个工作,在win中维护着一个固定的对象地址索引表,每个对象都有一个固定的句柄,而这张表由系统维护,使句柄对应着当前对象地址的指针,当程序要操作对象时,即可通过句柄来实时的实现对象的准确映射。

原文链接: https://www.cnblogs.com/erickingxu/archive/2013/02/16/2913225.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    关于指针和句柄的一些小记

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/78044

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:23
下一篇 2023年2月9日 下午6:23

相关推荐