野指针的学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了野指针的学习相关的知识,希望对你有一定的参考价值。
1、野指针
野指针是指向了“垃圾”内存的指着。
2、产生原因
(1)指针变量没有被初始化。任何指针变量刚刚被创建的时候,是不会自动变成NULL指针的,他的缺省值是随机的,这个时候指针是乱指的。所以指针变量在被创建的同时应该被初始化,让指针指向合法的内存。
(2)指针P被free或者delect之后,没有设置为NULL;当指着被free之后,其实就是释放了指针指向这块内存进行释放,也就是说指针依旧是指向这个地址,但是这个地址上面的东西不要了,并且系统也不会将这块内存继续保留。后面有可能将这个地址分配给别人,所以free掉之后,有的时候指针还是可以继续操作,但是很有可能系统恰叫将这块内存分配给别人。就会出现程序的崩溃。
(3)指针的操作超越了变量的作用范。
错误示范:
char *p = (char *)malloc(100); strcpy(p, "hello"); printf("p = %s\n", p); free(p); strcpy(p, "world"); printf("p = %s\n", p);
指针 p 被free之后,其实就是将p指向的这块内容进行释放,系统也对这块内存不在保留,以后别人malloc 的时候,就会将这个内存分配给别人。所以free 掉之后,就不要再继续使用指着p,会导致程序的崩溃。
解决办法:
char *p = (char *)malloc(100); strcpy(p, "hello"); printf("p = %s\n", p); free(p); p = NULL; p = (char *)malloc(100); strcpy(p, "world"); printf("p = %s\n", p);
指针p 被释放之后,赋值为NULL;后面的可以通过判断 p != NULL 进行判断。被使用之后的指针,绝对不要在继续使用了,重新使用的话,要重新申请新的内存地址,或者指向新的合法的地址。
以上是关于野指针的学习的主要内容,如果未能解决你的问题,请参考以下文章