我有這個循環,它解析機器代碼並仿真指令,就好像它是一個處理器。如果在任何時候我嘗試訪問超出程序定義的內存位置(1MB)的內存大小,它將打印一個錯誤,說我超出範圍。在此循環中插入fprintf()將導致其無限循環。爲什麼?
這是學校裏的功課,所以所有輸入的二進制文件應該可以正常工作,如果我的代碼是正確的。但是在其中一個二進制文件中,我有一個錯誤,指出我試圖訪問超出此範圍的內存。所以我想在那裏放一個fprintf()
(或者只是printf()
,沒關係)聲明,看看我的一些變量的內容。但是,當我這樣做時,我會得到完全不同的行爲。我從來沒有得到這個消息,而是程序無限循環。我沒有改變別的。而且它看起來與我打印的內容無關。插入printf("hello")
會導致相同的行爲。
如果我把我的fprintf()
,打印錯誤的函數裏面,我沒有得到無限循環,一切都打印爲我所期望的。
這是一個相當龐大而複雜的程序,所以我不能只將其粘貼在這裏,我不認爲只是一小部分就足夠了,所以我希望我提供足夠的信息來獲得幫助。
我在我的陳述結尾處添加換行符,因爲我讀過應該刷新緩衝區,但即使我添加了fflush(stdout)
,它似乎也沒有關係。
聽起來像你可能有內存損壞錯誤,緩衝區溢出或甚至堆棧崩潰。不幸的是,這些很少出現故障的地方,但後來當別的東西使用記憶時可能很難找到。 – Dampsquid 2012-02-20 01:38:04