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值没有发生改变,完全正常!
经过对比,很容看出问题所在,强制的类型转换使得结构体内部数据被破坏!
补充:综合编程 , 安全编程 ,