野指针的学习

1、野指针

    野指针是指向了“垃圾”内存的指着。

2、产生原因

    (1)指针变量没有被初始化。任何指针变量刚刚被创建的时候,是不会自动变成NULL指针的,他的缺省值是随机的,这个时候指针是乱指的。所以指针变量在被创建的同时应该被初始化,让指针指向合法的内存。

    (2)指针P被free或者delect之后,没有设置为NULL;当指着被free之后,其实就是释放了指针指向这块内存进行释放,也就是说指针依旧是指向这个地址,但是这个地址上面的东西不要了,并且系统也不会将这块内存继续保留。后面有可能将这个地址分配给别人,所以free掉之后,有的时候指针还是可以继续操作,但是很有可能系统恰叫将这块内存分配给别人。就会出现程序的崩溃。

    (3)指针的操作超越了变量的作用范。

错误示范:

char *p = (char *)malloc(100);
strcpy(p, "hello");    
printf("p = %s
", p);
free(p);
strcpy(p, "world");
printf("p = %s
", p);

    指针 p 被free之后,其实就是将p指向的这块内容进行释放,系统也对这块内存不在保留,以后别人malloc 的时候,就会将这个内存分配给别人。所以free 掉之后,就不要再继续使用指着p,会导致程序的崩溃。

解决办法:

char *p = (char *)malloc(100);
strcpy(p, "hello");
printf("p = %s
", p);
free(p);
p = NULL;
p = (char *)malloc(100);
strcpy(p, "world");
printf("p = %s
", p);

    指针p 被释放之后,赋值为NULL;后面的可以通过判断 p != NULL 进行判断。被使用之后的指针,绝对不要在继续使用了,重新使用的话,要重新申请新的内存地址,或者指向新的合法的地址。

原文地址:https://www.cnblogs.com/qxj511/p/5221836.html