- 1,未初始化的指针
- 2,操作数组,指针超过了数组长度
- 3,指针存在,数据却已经离开
- 4,空指针
创建一个指针,但没有赋值。
#includeint main() { int *a; *a = 3; return 0; }
效果:编译器会报错。
2,操作数组,指针超过了数组长度指针,但是越界了。
长度为3,却操作了第五个地址。
#includeint main() { int a[] = {1, 2, 3}; int *b = a; *(b + 4) = 6; printf("%dn", *(b + 4)); return 0; }
效果:报错。
3,指针存在,数据却已经离开#includeint *abc() { int a = 3; return &a; } int main() { int *a = abc(); *a = 4; printf("%dn", *a); return 0; }
效果:报错。
4,空指针可以给指针赋值NULL,代表空指针。
#includeint main() { int *a = NULL; printf("%dn", a == NULL); int b = 3; a = &b; printf("%dn", a == NULL); return 0; }
效果:
一开始是NULL,赋值之后,不再是NULL。
赋值空,判空,都是比较常用的做法。



