指针常见错误
错误 1:未初始化的指针
一个最易犯的指针错误是试图引用未初始化(因而指向的是无效地址)的指针。例如:
int*p;
*p=12;
指针p在声明时未初始化,指向的是一个随机的内存地址。它可能指向系统栈、全局变量、程序代码区或操作系统。执行*p=12;时,程序会不加辨别地试图在p指向的随机位置处写入一个12。这时程序有可能立即崩溃,也可能等上半小时然后崩溃,或者程序另一个部分的数据被悄然破坏而您却浑然不知。可见这种错误非常难于排查。请确保指针解引用(取出指针指向的地址中的内容)之前所有的指针已被初始化为指向有效地址。
错误 2:无效指针引用。
当指向无效地址的指针仍被引用时即发生无效指针引用。
导致这类错误的一种可能是当q未初始化时执行p=q;。此时指针p也变为未初始化的。任何对*p的引用即造成无效指针引用。
避免此类错误的惟一途径是用画图的方法记录每个步骤的指针引用情况,并确保全部指针都各有所指。由于和错误1同样的原因,无效指针引用也会导致程序莫名其妙地崩溃。
错误 3:零指针引用
当试图在程序中引用指向零地址的指针时即发生零指针引用。例如,若p是一个整型指针,则下面的代码是无效的:
p=0;
*p=12;
p不指向任何内存块。所以,试图对此内存块的读写即为无效的零指针引用。我们会在后文看到,将指针指向零地址是有充分的正当理由的。然而,对零指针的解引用(取出指针指向的地址中的内容)却是无效的。
所有这些错误,对于一个程序来说都是致命的。要谨防您的程序产生这些错误。最好的方法是为程序的每一步画图记录指针引用情况。
华为方舟编译器获多硬件平台支持,未来RISC-V芯片或也支持
LG成功生产关键OLED材料 以减少对进口依赖
腾讯智能下棋机器人机械手装置专利
苹果支付1.13亿美元和解iPhone“降速门”指控
可调稳压器LM317的全面介绍
C语言入门教程-指针常见错误
法国拆除华为无线设备
智能烟感产品市场需求崛起;电动汽车或迎来随充时代
AMS高精度温度传感器在智能洗衣机中的应用
高德红外推进红外技术在新兴应用领域的快速发展
新型STPOWER SLLIMM大功率器件内置了功率和智能控制功能
有人在密谋「克隆地球」?
比亚迪将推出基于指纹识别技术的触控芯片
什么是熊猫伴音(PANDA-1)
介绍一款实用的方波发生器
SPI接口在存储器接口上的应用
一种智能家电解决方案
新手测试工程师应该怎样学习软件测试
如何设计一款消费者需要的产品-我曾误解的汽车
大疆正式发布新一代航拍小飞机mini 2