记一次bug——size_t x64引起的

时间:2022-10-06 17:03:31

环境:win7+vs2012, 代码如下:

#include <iostream>

void func(int &n)
{
n = 10;
}

int main(int argc, char *argv[])
{
size_t n ;
func((int&)n);
std::cout << std::hex << n << std::endl;

system("pause");
return 0;
}

我们知道size_t在win32下是4个字节,在x64下是8个字节。

在win32下这样写是没什么问题的;

但是在x64下得到的结果是:0xcccccccc0000000a

然后我们再把:

size_t n;

改为:

size_t n = 0;

运行下结果又对了。


原因是size_t n默认将其初始化为0xcccccccccccccccc

赋值的时候只将低位的4个字节赋值所以得到0xcccccccc0000000a


所以在使用size_t与其他类型转型的时候一定要注意了,千万不要这样写!!!