指向局部地址而导致的问题记录

最近遇到一个因为指向局部地址导致的问题,记录下用来提醒自己。

struct
{
   uint8_t *data;
   uint8_t *data1;
}data_t;

void   set_data(data_t const *data)
{
        printf("%s\r\n",data->data) ;

}

void  set_all_data(bool flag)
{

   data_t data={0};
    if(flag)
    {
        uint8_t my_data[9];
         memset(my_data,0x31,8);
         my_data[8]='\0';
         data.data=my_data;
    }
  set_data(data);
}

发现打印的数据有时是正确的"11111111";但有时会出错。

原来是my_data是局部的变量,作用域只存在于if的判断内,当flag的判断if结束时就被释放了,但是里面的数据有可能变化,也可能不变,所以当还是指向它的地址时,就会出现数据有时对有时错。

注意:不要指向局部变量的地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值