NULL指针解引用
首先问大家一个问题就是,大家最开始使用函数(包含指针的函数),例如
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream),是否有做过一些处理判断?如果有就别往下看了,没有呢可以往下看看_
我个人是没有的。
但是我最近在上班的时候处理一些事情的时候发现,使用这类函数是需要对指针进行null检查的,叫检查null指针解引用
为什么?
什么是空指针解引用
C语言空指针的值为null,一般null指针指向进程的最小的地址,通常这个值为0.如果试图通过空指针对数据进行访问,会导致运行时的错误。当程序试图解引用一个期望非空但是实际为空的指针时,会发生空指针解引用错误。对于空指针解引用可能会导致程序异常终止或拒绝服务。如:再Linux系统中访问空指针会残生segmentation fault的错误。
危害
空指针解引用是C/C++程序中较为普遍的内存缺陷类型。当指针指向无效的地址并且对其引用时。可能产生不可预见的错误,导师软件系统崩溃。空指针引用缺陷可能导致系统崩溃、拒绝服务诸多严重后果 。
举例
void test(int *p){*p++;printf("%d\n",*p);}int main(){int *p=getvalue();if(p==null) //就是这一步,验证是否为空{printf("error:p is null\n");}test(p);//空指针解引用}
注意
的是:验证是否为空的时候一定要起到效果,不要太早也不要太晚,一般在函数调用前使用。
本文是个人的见解,如果有误感谢大佬指点,欢迎讨论学习。