謝謝大家,至今爲止您的意見和建議!C中的文件讀取,隨機錯誤
此外:
經過測試和進一步玩弄,它似乎的FileReader各個呼叫成功。但多次調用FileReader(這些可能是FileReader的單獨版本)會導致問題發生。
末添加
你好,
我有一個非常不尋常的問題[請仔細閱讀本:這一點很重要(代碼:: Blocks的編譯器,Windows Vista家庭)沒有複製代碼]與C文件讀取功能(fread,fgetc)。現在,通常,文件讀取功能將數據正確地加載到自分配和自釋放字符串(並且不是字符串的問題),但這是奇怪的地方(並且量子物理所適用的地方):
錯誤捕獲語句報告EOF發生得太早(IE正在加載的文本文件的開始處的註釋部分)。打印字符串[加載後]報告確實太短(24個字符)(但它有足夠的空間來適應它[〜400],並且沒有分配問題)。該龜etc循環迭代報告它的終止僅爲24(該文件是大約300個字符長)與EOF:這是不言而喻怪誕:
暫檢查讀取 - > _基地報告的整個(〜300)個字符被加載 - 在24沒有EOF。困惑,[因爲它是一個fgetc循環]我添加了一個printf來顯示每個字符[作爲%d,所以我可以在每一步發現-1 EOF],所以我可以看到它在做什麼,並對其進行了修改,使其成爲單個字符。它循環很好,達到了300分而不是24分 - 但是隨後會隨機凍結。但是,當我刪除printf時,它又終止於24,並被錯誤捕獲的語句所捕獲。
摘要: 所以,基本上我有一個由「觀察者效應」了量子物理學的影響了一個錯誤:當我嘗試觀察字符我通過的printf從龜etc獲得,這個問題(早期EOF終止於24)消失,但是當我停止查看時,錯誤捕獲聲明報告提前終止。
更奇怪的是,這不是第一次發生。 Fread有一個類似的問題,我無法弄清楚爲什麼,並用fgetc循環代替它。
[代碼不能真正提供,因爲代碼庫的大小是5個頭]。
段:
int X = 0;
int C = 0;
int I = 0;
while(Copy.Array[X] != EOF)
{
//Copy.Array[X] = fgetc(Read);
C = fgetc(Read);
Copy.Array[X] = C;
printf("%d %c\n",C,C); //Remove/add this as necessary
if(C == EOF){break;}
X++;
}
側面說明:它分解成最簡單的格式不重現錯誤。
當您嘗試調試問題時,或者它們只是間歇性地發生(稱爲相位問題)時,問題就會消失或發生變化,您稱之爲「量子物理效應」是常見的編程問題。有時他們會離開你犧牲工程神。所以你需要提供一些代碼,否則沒有人能夠幫助你。 – 2011-04-05 09:53:33
(你爲什麼試圖把英語變成LISP?)這在任何情況下都是不常見的。通常有一個名字:這是一個[heisenbug](http://www.catb.org/jargon/html/H/heisenbug.html)。 – 2011-04-05 09:54:17
從技術上講,你所描述的稱爲[Heisenbug](http://en.wikipedia.org/wiki/Unusual_software_bug#Heisenbug):) – GrahamS 2011-04-05 09:55:55