永发信息网

有些C和C++开发者故意在解除了某个指针引用的内存的分配之后,把该指针设为NULL.这为什么是个好主意?

答案:6  悬赏:20  手机版
解决时间 2021-01-24 21:43
  • 提问者网友:半生酒醒
  • 2021-01-24 10:56
有些C和C++开发者故意在解除了某个指针引用的内存的分配之后,把该指针设为NULL.这为什么是个好主意?
最佳答案
  • 五星知识达人网友:人類模型
  • 2021-01-24 12:22
在大多数C和C++实现中,没有检查指针实际上是否指向有效内存的途径.一中常见的错误就是:解除了某个内存块的分配,随后又在程序中引用该内存.此时,该指针所指向的内存和可能已重新分配用于其他目的.通过把指针设置为NULL,程序员希望能预防这些有害的引用--在大多数情况下,解除NULL指针的引用将生成运行时的错误.
全部回答
  • 1楼网友:冷風如刀
  • 2021-01-24 16:01
野指针NULL一可以减少这样的错误
  • 2楼网友:等灯
  • 2021-01-24 15:16
因为要是指针没有把该指针进行指空的话,有可能指针就会指向一个随即地址,##这是个非常危险的情况,因为随机地址可能是一个会指向系统或是其他关键地方,而修改这些地方可能导致系统的问题。
  • 3楼网友:蕴藏春秋
  • 2021-01-24 13:56
这种情况就是大家经常说的野指针问题,为什麽会出现野指针,回答者: chenyayuzx - 经理 五级 这个人已经回答的很完善了,并且,如果你的程序不想出现莫名其妙的错误或者正在运行时,突然非法关闭,并且问题不是同样的,那就表示可能有也指针出现,也指针的查找也是一个非常痛苦的体力活,所以最好是还是按照标准来写,释放完成后,最好把它置成空的。可以有效的防止野指针的数量和形成。
  • 4楼网友:老鼠爱大米
  • 2021-01-24 13:37
我们知道C是比较自由的语言,指针指向的内存虽然被清空,没有设置为NULL的情况下,指针仍然可用,且可以指向程序内存空间的任意地址。程序逻辑上稍有疏忽即可导致修改不该修改的内存。 如果清空指针指向的内存后,立刻将其设为NULL,之后针对该指针的分配、调用、修改都会引发一个错误消息。 个人认为 Delphi 在这方面做的就比较优美,Ddelphi调用Free的时候并不直接调用Free,而是尝试首先Free,紧跟着设置Nil(Delphi中的Nil等同于C中的NULL),还有一个专门的函数:FreeAndNil()
  • 5楼网友:山河有幸埋战骨
  • 2021-01-24 12:28
是一个规范问题,不那么做不会直接导致什么后果,但是有潜在的弊端。程序员写程序时,难免会有些错误,而且自己有时候很难觉察到。否则就不会出错了。而且更有些时候,他们心里想的是没错的,只是打错了。 比如if(i==1);打成了if(i=1);这样的错误是可以编译过去的,它和i=1; if(i);是没什么区别的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯