野指针

xiaoxiao2021-02-27  234

野指针不是NULL指针,是指向"垃圾"内存的指针。一般不会错用NULL指针,因为用if语句很容易判断。但是野指针是很危险的,if语句对它不起作用。 野指针的成因主要有两种。 (1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如 char * p NULL; char *str=( char * )  malloc ( 100 ); (2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字"恶狠狠的。(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了"野指针"。如果此时不把p设置为NULL, 会让人误以为p是个合法的指针。 如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前, 通常会用语句if(pl=NULU进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。 char * p=( char * ) malloc ( 100 ); strcpy (p,"he11o")          //p所指的内存被释放,但是P所指的地址仍然不变 free (p ); if (p!=NULL )                  // 没有起到防错作用 { strcpy (p,"world");     / /出错 }
转载请注明原文地址: https://www.6miu.com/read-9169.html

最新回复(0)