今天在LeetCode刷题时,有一个bug找了一个下午。在vs2013能得到正确结果,但是在OJ上就是出问题。后面找了半天,才定位出错误并调试出来,发现原因与数组的初始化有关。将一个int类型、长度为256的数组全部初始化为-1。当时理所当然的使用了:
int arr[256];
memset(arr,-1,256);
memset是以字节为单位移动指针进行初始化的。上面本质是将整型数据的四个字节都初始化为-1(0xff),初始化256个字节。
(以补码方式存放)
所以应该这样做memset(arr,-1,256*4) 或者memset(arr,0xff,sizeof(arr));
但是并不是通用方法,初始化为0或者-1可以这样做,但是初始化为-2就不可以这样做了。
一不小心就错了!