指针初始化对内存访问的影响

空指针的使用可能造成错误,指针初始化的时候未赋初值而造成的野指针的错误更加可怕。

    前段时间在重写opencv LK金字塔光流迭代算法(cvCalcOpticalFlowPyrLK 函数)的时候,对初始化在程序中的重要作用有了更加深入的认识。

    程序的具体问题如下,在处理比较小的图片的时候,直接运行会发生错误,原因是内存访问越界(提示为该内存不能read)。但是用F5调试运行的时候,则不会发生此错误。另外在处理比较大的图片的时候,对图片中像素点的访问提示访问越界,仔细检查后发现并无越界发生。调试运行同样出错。

    上网搜了一下,发现vc debug程序对调试程序申请内存时候进行了保护,防止其非法访问。但是这无法解决我的问题。

    最后,试着将所有的指针初始化,问题得以解决。出问题的指针正是没有初始化。由此可见变量初始化的重要性。因此建议,在定义变量的时候直接初始化,以免遗忘。指针定义的时候直接赋值为NULL。

    另外,在定义类的时候,常常定义一些指针,由于构造函数对这些指针没有初始化,因此也会造成隐藏的错误。因而建议在类的构造函数中将所有指针初始化为NULL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值