您的位置:首页 > 其它

如何避免野指针

2016-10-12 21:07 246 查看
野指针:随机指向内存中的一个地址,对于这个地址不一定有访问权,会导致内存泄漏(访问了已经释放的内存,或没有访问权限)。

下面这个程序很好的避免了野指针:

#include <stdio.h>
#include <stdlib.h>
//#define NULL (void *)0 //(void *0) 是0地址,是不允许操作,不允许访问的。
#define MAX_SIZE sizeof(char) * 100
//memset bzero

int main()
{
char *ptr = (char *)malloc(MAX_SIZE);//必须是相同类指针类型赋值,否则有可能会越界。

if(NULL == ptr)
{
printf("malloc error!\n");
exit(1);
}

//memset(ptr,0,MAX_SIZE);
bzero(ptr,MAX_SIZE);

scanf("%s",ptr);

printf("ptr = %s\n",ptr);

free(ptr);

ptr = NULL;
}

如何避免野指针:

(1)当指针没有做初始化,即没有指向时,将指针指为NULL。一方面可以提醒自己这个指向NULL的指针不可操作不可访问,另一方面NULL这个标记便于我们检查和避免野指针;

初始化为NULL的目的:一是出现段错误时易改错,二是(void *0) 是0地址,是不允许操作,不允许访问的。

(2)当想给指针赋值时,检查是否已经给他分配了内存空间,如果没有分配就再用malloc分配;

(3)给指针分配完内存后,不使用时再用free()函数清空内存空间(清空原来的缓冲区),并再将指针指为NULL。

注:void * 为万能指针,可以接收任何类型的指针,但是不能对其取值(不能对他指向的空间进行操作,他只能暂时存放地址)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: