读书人

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

发布时间: 2012-09-17 12:06:51 作者: rapoo

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


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

读书人网 >C++

热点推荐