linux: 编译C,出现了dereferencing type-punned pointer will break strict-aliasing rules。
即 取消对类型指针的引用将打破严格的别名规则。
原因:高优化级别下,由于不同类型指针之间的强制类型转换导致;
根本:由于不同类型指针不会指向同一片内存,从而可能导致编译出不符合原意的代码;
解决方法:
如:1. 示例如下:
char my_array[10];
*(int *)my_array = 0xaabbccdd;
- 修改如下即可解决此问题:
char my_array[10];
int tmp = 0xaabbccdd;
memcpy(my_array, &tmp, sizeof(tmp));