野指针产生的原因: 1,指针变量和他所指向的内存空间变量是两个不同的概念 2,虽然调用free(p)方法释放了指针所指向的内存空间,但是指针变量并没有重置成NULL 3,造成释放了所指向的内存空间之后,使用 if( p != NULL ) 还会被执行,还会执行其中的 free() 方法 避免方法: 1,定义指针的时候,初始化其值为 NULL ( char *p = NULL; ) 2,释放指针所指向的内存空间之后,把指针重置成 NULL 1 ······ 2 3 char *p = NULL;
小程序如下: 1 void Test(void) 2 { 3 char *str = (char *) malloc(100); 4 strcpy(str, "hello"); 5 free(str); 6 if(str != NULL) 7 { 8 strcpy(str, "world"); 9 printf(str); 10 } 11 } 请问运行Test函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险.因为free(str);之后,str
#include <stdio.h>#include <stdlib.h>#include <string.h> //野指针产生的原因//指针变量和它所指向的内存空间变量是两个不同的概念//释放了指针所指的内存空间 但是指针变量本身没有重置成null //造成释放的时候 通过if(p1 != NULL) //避免方法:1)定义指针的时候 初始化成null 2)释放指针所指向的内存空间后,把指针重置成nullint main(void){ char *p1 = NULL;
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h> //野指针产生的原因 //指针变量和它所指的内存空间变量是两个不同的概念 //释放了指针所指的内存空间,但是指针本身没有重置成null //造成释放的时候 通过if(p1!=NULL) //避免方法:1)定义指针的时候,初始化成NULL.2)释放指针所指向的内存空间后,把指针重置成NULL. int m
1.会产生野指针的做法 #include <stdio.h> //这就是一种错误的写法 int main(){ int *p = NULL; p = (int *)malloc(4); //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针 if (p != NULL){ free(p); } if (p != NULL){ free(p); } return 0; } 2.正确的做法: #include <stdio.h>//指针变量和指针所指向的内存变量是两个不同的
“野指针”不是NULL指针,是指向垃圾内存的指针. 使用if(ptr != NULL)并不能起到防错的作用 “野指针”的成因主要有三种: #1 指针变量没有被初始化. #2 指针ptr被free或delete之后,没有置为NULL,让人误以为ptr是个合法的指针. #3 指针操作超越了变量的作用范围. 源地址:http://blog.chinaunix.net/uid-26758020-id-3307049.html
//最近,有朋友开玩笑问 int *p *是指针还是p是指针还是*p是指针,当然了,知道的都知道p是指针 //野指针----->>>指没有指向一个地址的指针(指针指向地址请参考上一篇文章) //空指针---->>指向空(null)的指针就是空指针 //指针的其他用法,指针可以指向指针,指针可以进行+ - * /运算 /* 特别注意,各个编译器都不相同,这里有一种错误写法,如: int *p,int a=10,b=20; p=&b; *p = &a;
1.野指针 野指针是指向了"垃圾"内存的指着. 2.产生原因 (1)指针变量没有被初始化.任何指针变量刚刚被创建的时候,是不会自动变成NULL指针的,他的缺省值是随机的,这个时候指针是乱指的.所以指针变量在被创建的同时应该被初始化,让指针指向合法的内存. (2)指针P被free或者delect之后,没有设置为NULL:当指着被free之后,其实就是释放了指针指向这块内存进行释放,也就是说指针依旧是指向这个地址,但是这个地址上面的东西不要了,并且系统也不会将这块内
野指针,也就是指向不可用内存区域的指针.通常对这种指针进行操作的话,将会使程序发生不可预知的错误. 这是野指针的定义,但很多C语言新手对它还是很陌生,下面我就简单举一个例子来看一看.在VC6.0中输入以下代码: #include <malloc.h> #include <stdio.h> void main() { char *p; //...可能有别的很多操作 if(p != NULL) { free(p); } else { p = (char *)malloc(4); } /