码迷,mamicode.com
首页 > 其他好文 > 详细

[Pointer]使用指针时有可能导致非法内存操作

时间:2015-08-11 12:19:15      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:struct   指针   内存   异常   

简述

在debug一个程序时,发现传入给一个API的参数的值并非预期,于是往上追朔查找,最终发现是在定义指针时没有给该指针赋地址初始值,后面就直接用该指针进行操作了,导致了许多异常。

情况说明

void func(void)
{
    XXX_struct *str_data;
    str_data->element1 = globalvar1;
    str_data->element2 = globalvar2;
    /* ... ... */
    func2(str_data);
}

这里在函数func中定义了str_data指针,但是指针的值是地址的,这么没有给它赋初始地址,那这个地址是不确定的:
技术分享
而接着对str_data的成员进行了赋值的操作,如果这些成员中还有是指针形式的,那就很容易造成访问到没有写访问权限的地址,在ARM MCU当中就极为容易触发hardfault了。没有赋初值的指针,好像是叫幽灵指针吧……
因此,像这里最好这样做:

void func(void)
{
    XXX_struct str_data;
    str_data.element1 = globalvar1;
    str_data.element2 = globalvar2;
    /* ... ... */
    func2(&str_data);
}

而且str_data当中的成员如果有指针成员,也要注意其初始地址问题哦。

版权声明:本文为博主原创文章,未经博主允许不得转载。

[Pointer]使用指针时有可能导致非法内存操作

标签:struct   指针   内存   异常   

原文地址:http://blog.csdn.net/suxiang198/article/details/47417457

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!