野指针的学习

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 进行判断。被使用之后的指针,绝对不要在继续使用了,重新使用的话,要重新申请新的内存地址,或者指向新的合法的地址。

以上是关于野指针的学习的主要内容,如果未能解决你的问题,请参考以下文章

20160208.CCPP体系详解(0018天)

20160208.CCPP体系具体解释(0018天)

C语言 野指针

C语言学习 -- 指针

野指针就像野狗吗(指针详解1)

C语言学习笔记指针