最近遇到一个因为指向局部地址导致的问题,记录下用来提醒自己。
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结束时就被释放了,但是里面的数据有可能变化,也可能不变,所以当还是指向它的地址时,就会出现数据有时对有时错。
注意:不要指向局部变量的地址。