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

时间:2022-10-29 08:16:34

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


数据结构体:

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值没有发生改变,完全正常!


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