嵌入式 避免出现野指针

原创 2013年12月02日 14:48:21

为了避免出现野指针,通常我们需要将指针初始化为NULL,用完后也为其赋值为NULL。

结构体成员指针往往会被忽视,注意它也需要初始化,且需要为结构体指针分配足够的内存,真是就用到了malloc这个宏,使用方法如下:

给指针变量赋初值:

方法一:char * p = (char * )malloc(sizeof(char));

方法二:char * p = NULL;

给数组赋初值:

方法一: int a[10] = {0};

方法二: memset(a, 0, sizeof(a));

memset函数有3个参数:第一个是要被设置的内存起始地址;第二个是要被设置的值;第三个是要被设置的内存大小,单位为字节;

给结构体指针赋初值:

方法一: pstu = (struct student *)malloc(sizeof(struct student));

常见错误: pstu = (struct student *)malloc(sizeof(struct student*));

为了避免出现野指针,在程序的debug版本里可以如下处理:

在函数的入口处使用assert(NULL != p)对参数进行校验。或者用if(NULL !=p)来校验。它会提醒有没有初始化指针,起到定位错误的功能。

assert是个宏,它后面括号里的条件若不满足,则程序终止运行并提示出错。

使用完指针后务必记得释放指针所指向的内存,否则不知道什么时候又改变了指针的值,使其变成了野指针!

这里就需要free(p)这个函数的帮忙了,它可以切断指针与指向内存的联系。但是需要注意的是free对于同一指针变量只能使用一次。不然会导致出错或者内存泄漏。

释放完内存后另指针的值变为NULL!

如下:

free(p);

p = NULL;

相关文章推荐

第六十五篇:VS工程文件中cpp、h文件在main中调用关系及如何避免出现“找到一个或多个多重定义的符号”

1、出现的问题:”error   LNK1169:   找到一个或多个多重定义的符号“的错误 2、该问题出现的场景:(假设有一个A.h,A.cpp,main,在main中调用了A.cpp文件中的函数,...

在使用Handler时如何避免出现内存泄露

在Android开发中使用Handler出现了内存泄漏问题或者HandlerLeak警告public class MainActivity extends Activity { private...

android加载图片时避免出现OOM(OutOfMemory)

一、利用BitmapFactory.Options在图片加载到内存前先进行压缩 相关API BitmapFactory.Options options = new BitmapFactor...
  • panyzyw
  • panyzyw
  • 2017年03月21日 18:03
  • 203

Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法

在编写Android程序的时候,我们总是难免会碰到OOM(OUT OF MEMORY)的错误,那么这个错误究竟是怎么来的呢,可以先看一下这篇文章ANDROID BITMAP内存限制OOM,OUT OF...
  • strliu
  • strliu
  • 2011年07月26日 19:26
  • 601

系统设计时应尽量避免出现left outer join, right outer join

今天盖尔找我优化一条SQL,SQL如下: SELECT DISTINCT b.organ_id, c.company_name as organ_...

避免出现bitmap内存限制OUT OF MEMORY的一种方法

 在编写Android程序的时候,我们总是难免会碰到OOM(OUT OF MEMORY)的错误,那么这个错误究竟是怎么来的呢,可以先看一下这篇文章ANDROID BITMAP内存限制OOM,OUT O...
  • dangerb
  • dangerb
  • 2011年03月15日 23:07
  • 580

Android JNI NDK Eclipse 设定(避免出现重复build的设定方法)

When editing native JNI code in an Android project using the Android NDK you may configure Eclipse...
  • wchinaw
  • wchinaw
  • 2011年09月06日 14:28
  • 1445

如何在Mac中使用Android SDK,使用adb工具避免出现-bash: adb: command not found

在Mac系统中,也可以安装使用Android SDK。并使用adb工具来对安卓系统进行调试。 下载安装Android SDK Mac版本 访问:http://developer.a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 避免出现野指针
举报原因:
原因补充:

(最多只允许输入30个字)