2007年4月26日

"null pointer assignment"的由来

很久以前见到过,当时不明白,看了《C专家编程》后明白了
Thanks to sendoh

"无效的指针可能成为程序员的噩梦,人们很容易用一个无效的指针来引用内存。在所有的虚拟内存结构体系里,一旦一个指针进行解引用操作时所引用的内存地址超出了虚拟内存的地址空间,操作系统就会终止这个进程。但MS-DOS并不支持虚拟内存,即使内存访问失败,它也无法立即捕捉到这种情况。
然而,在MS-DOS系统中可以动点小脑筋,在程序结束后检测解除引用空指针的情况,在Microsoft C和Broland C中都采取了这种方法。在进入程序之前,保存内存地址为零的(内存)的值。在程序结束时,系统检查这个地址的值与原来的是否相同。如果不同,基本上可以确定你的程序中使用了空指针来访问内存,运行时系统会打出一条"null pointer assignment"信息"。

更有趣的事情发生在《创世纪 VI》的一个副产品上,Saveage Empire。是《游戏编程全接触》的作者说的。在快要发布的时候屏幕上会打印"Error:(null)pointer assignment",然而空指针很难被找出,于是这样修复了这个问题,用16进制编辑器修改了可执行文件中的这个文本串改为"Thanks for playing Savage Empire."。注意,它们是等长的...

1 条评论:

realdodo 说...

嗯……最后一段很有点搞笑哦~~~~