当前位置:编程学习 > C/C++ >>

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

 

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

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,