野指针产生的原因

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//野指针产生的原因
//指针变量和它所指向的内存空间变量是两个不同的概念
//释放了指针所指的内存空间 但是指针变量本身没有重置成null

//造成释放的时候 通过if(p1 != NULL)

//避免方法:1)定义指针的时候 初始化成null 2)释放指针所指向的内存空间后,把指针重置成null
int main(void)
{

char *p1 = NULL;
p1 = (char *)malloc(100);
if(p1 == NULL)
{
return ;
}
strcpy(p1, "11112222");

printf("p1:%s \n", p1);

if(p1 != NULL)
{
free(p1);
p1 = NULL;    //释放了指针所指的内存空间 但是指针变量本身没有重置成null
}
if(p1 != NULL)
{
free(p1);

}
return 0;
}

时间: 2024-11-06 21:11:53

野指针产生的原因的相关文章

C语言进阶之路(三)----野指针的产生原因及解决办法

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

传智播客视频学习 ----&gt;&gt;&gt;&gt; 野指针产生原因和避免方法

野指针产生的原因: 1,指针变量和他所指向的内存空间变量是两个不同的概念 2,虽然调用free(p)方法释放了指针所指向的内存空间,但是指针变量并没有重置成NULL 3,造成释放了所指向的内存空间之后,使用 if( p != NULL ) 还会被执行,还会执行其中的 free() 方法 避免方法: 1,定义指针的时候,初始化其值为 NULL ( char *p = NULL; ) 2,释放指针所指向的内存空间之后,把指针重置成 NULL 1 ······ 2 3 char *p = 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

C++三种野指针及应对/内存泄露

野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是野指针是很危险的,也具有很强的掩蔽性,if语句对它不起作用. 造成野指针的常见原因有三种: 1.指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针.在Debug模式下,VC++编译器会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当

产生野指针的原因

产生野指针的原因 by 伍雪颖 版权声明:本文为博主原创文章,未经博主允许不得转载.

C语言指针2(空指针,野指针)

//最近,有朋友开玩笑问 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); } /