C/C++强制类型转换中的安全隐患一例

最近写一个小程序,遇到一个莫名的问题,在调用某一个方法后,与之相关的结构体数据内容被修改。起初以为是方法写的有问题,但该方法已经在多个实例中运行良好,没有出过类似问题。仔细的对比了之前对该方法调用的过程,发现有所不同之处。


数据结构体:

struct test_data

{

     int    item_num;

     unsigned int   item_offset;

     int   marker;

     ...........

};


调用方法:

int  save_data(void* data,  long long &saved_offset );


调用过程1:

test_data  data;

data.item_num = 10;

data.marker = 2000;

调用  save_data(&data,  (long long &)data.item_offset );

结果:在这个调用过程结束后,发现data.marker的值被改变!


调用过程2:

long long pos_save = 0;

save_data( &data, pos_save );

data.item_offset = pos_save;

结果:data.marker值没有发生改变,完全正常!


经过对比,很容看出问题所在,强制的类型转换使得结构体内部数据被破坏!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值