避免指针问题的最佳实践

Pal*_*Dot 18 c pointers

与指针有关的程序员错误的实际结果是什么?

当程序员创建指针错误时会发生什么"不良影响"?

带代码的实际例子是优选的.

Rya*_*ela 23

当指针被滥用时可能出错的事情:

  1. 内存泄漏 - 您在方法中分配一个指针,然后让它超出范围而不正确地释放它.现在,指向堆上内存的指针已丢失,但内存仍保持分配状态.释放这种记忆现在非常困难.来自维基百科的更多信息.

  2. 访问冲突 - 您创建一个指向您无权访问或不存在的内存地址的指针.指针只是整数,可以像任何其他数字一样操纵.当您尝试取消引用无效指针时,程序将暂停.来自维基百科的更多信息.

  3. 空指针错误 - 这是访问冲突的特例."停放"指针的正确方法是将其值设置为零或null,以使其不指向任何特定的位置.尝试取消引用空指针将停止您的程序.来自维基百科的更多信息.

  4. 缓冲区溢出 - 为30个字符的字符缓冲区分配指针.然后,您继续将用户输入(从套接字,文件,控制台等)流入此缓冲区.如果未能正确实现缓冲区边界检查,则程序可能会将超过30个字符放入缓冲区.这将破坏存储器中缓冲区附近存储的所有数据,并可能使您遭受恶意代码攻击.来自维基百科的更多信息.

  5. 内存损坏 - 指针只是一个整数,包含它指向的内存地址.作为一个整数,指针算术可用于以各种有趣的方式操纵指针的值.如果指针计算出错,可能会产生细微的错误.指针现在将指向内存中的某个未知位置,并且在取消引用时可能会发生任何事情.

  6. 以空值终止的字符串问题 - 当期望以null结尾的字符串的字符串库函数被送入非空终止的字符指针时,会发生这些错误.字符串库函数将继续一次处理一个字符,直到找到null为止 - 无论在哪里.一个笑话最能说明这个错误.


tva*_*son 18

编译器投诉

来自http://xkcd.com

我猜我正在逐字地提出插图请求.

  • 这是对这个问题的真正答案吗?(无论如何它仍然是一个很好的卡通) (4认同)