今天在對尤拉篩這個演算法練習的時候,發現了一直沒有對memset的初始化的誤區,在對乙個尤拉篩的板子的**找bug,卻一直找不出來。
原始錯誤**
#include
#include
int a[
1000005];
int prin[
1000000];
void
prinme()
//素數打表}}
intmain()
printf
("%d\n"
,cnt)
;return0;
}
發現錯誤
按道理來說輸出的值應該為4,但這裡卻是0,所以將陣列a[0]–a[8]的值一一打出來,如圖:
在這裡發現,memset()對陣列a的初始化沒有起作用,然後將陣列a全部初始化為1,來對這個**進行反向修改,得到了正確答案。
正確**:
#include
#include
int a[
1000005];
int prin[
1000000];
void
prinme()
}}intmain()
printf
("%d\n"
,cnt)
;return0;
}
這樣方可得到正確答案。
memset是計算機中c/c++語言初始化函式。作用是將某一塊記憶體中的內容全部設定為指定的值, 這個函式通常為新申請的記憶體做初始化工作。
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法
memset不能將整數陣列初始化為0,-1之外的其他值
memset函式按位元組對記憶體塊進行初始化,所以不能用它將int陣列初始化為0和-1之外的其他值(除非該值高位元組和低位元組相同)。
第一篇部落格,有錯誤請指出。謝謝!
乙個memset函式使用時的坑
平時使用memset函式都是用來初始化字串,從來沒有注意過它具體是怎麼實現的,最近無意中發現原來這個函式裡面還是有坑的。我嘗試用它來初始化整型陣列 int array 10 memset array,1,sizeof a 我原本是想將陣列元素全部初始化為1,可是卻是這樣的 一開始不明白為什麼會這樣,...
font size的乙個誤區
專案中有一處需要顯示乙個小圓點,用的是font awesome的圖示庫,隨手設定了乙個font size 1px,chrome下顯示沒有問題,ie下卻怎麼都顯示不出,開始以為是空span在ie下的bug,按stackoverflow的答案修改了樣式依然不起作用,最後無意間改了一下font size發...
乙個memset引發的血案
前幾天做了一道bst題,提交了幾次都是wa,今天抽空拿了出來仔細瞧瞧總算被我發現禍頭根源.總結原因還在於自己對memset不太了解,以前用對估計也是瞎貓撞見死耗子 memset的介紹 void memset void buffer,int ch,size t count buffer 指向某段記憶體...