原文及更多內容:http://yysource.sourceforge.net/?p=99
程序中的變量,有時會被莫名奇妙地改變。之前明明是111,在某個函數過後可能就變成31348了。
很可能是因爲程序中的其他變量(比如字符串)寫入超出範圍了,但是由於超出的部分剛好是本程序的其他變量所在的內存空間,
所以系統不會報錯。但是你其他的變量就這樣不幸地“被改變”了。
比如,在讀取文件內容的時候,往往需要循環讀取,直到不能再讀
……定義變量……
char contents[255];
int i = 0;
……各種無關函數紛紛路過……
while (ReadFile(hFile, contents + strlen(contents), 255, NULL, NULL))) {}
假設讀了第一次後, strlen(contents) == 200 ,還可以再讀。那麼這次真的讀到了 255 個字節,
而此時 contents 只剩下 55 字節可以裝了……於是,多出來的部分全部硬塞到 i,以及i後面的變量中去了。