为什么通过空指针读写的时候就会出现异常?
-
除了NULL表示空指针,是否还有其他的值也是空指针?
-
如果还有其他的值,你们这些表示空指针的值都是什么?为什么?
首先解答第一个问题,在windows核心编程第四版的windows的内存结构一章中,表13-1有提到NULL指针分配的分区。其范围是从0x00000000
到0x0000FFFF
。这段空间是空闲的,对于空闲的空间而言,没有相应的物理存储器与之相对应,所以对这段空间来说,任何读写操作都是会引起异常的。
有了上面的解答后,第二个问题就很容易解答了。NULL
的定义出现以下几个地方:
stdio.h
头文件中
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
ios.h
文件中