我正在使用Dijkstra找到完成某個謎題的最短路徑,其中謎題的工作方式如下。你有五個密碼子,可以是-4到4之間的任何一個(雖然它們的表示方式不同,-4/4爲「非常低/高」,-3至-1或1至3爲「低/高」 ,並且「完成」爲0)。其目標是將所有五個設置爲0,使用20種不同的「技術」,將密碼值提高/降低一定量。如果某種技術會在邊界之外修改其中一個密碼,即高於4或低於-4,那麼它將不會執行任何操作。所以,我將它表示爲一個圖,其中節點是密碼值的所有可能的組合,起始節點是完成的節點(0,0,0,0,0)。爲了更容易,我將密碼錶示爲從0到8的值,其中4是完整值 - 這使我可以將它們的基數9轉換爲圖的數組索引,因此不會浪費在搜索上。我的Dijkstra算法中可能存在的free()問題
現在,我已經把它全部剔除了,而且我一直在調試並試圖弄清楚什麼是錯誤的,通常我會找出問題並修復它 - 但是這個讓我難住。我存儲的節點有確定的距離,但沒有在鏈表中訪問,以便輕鬆彈出訪問節點。當鏈表到達14256個節點時,它會失敗 - 但是它沒有做的是在鏈表元素上的一個free()被彈出。我不知道什麼可能導致免費()失敗,我還沒有找到任何幫助。
我之前沒有問過任何問題,所以我不知道禮節 - 我將把整個資料放在這裏,因爲我不知道在這種特殊情況下什麼是和不相關的,但它大約有140條線,比較大。在進一步細讀時,似乎並沒有真正的標籤或任何東西,所以我現在就把它放在鍵盤上。
編輯:好的。好的。現在我變得徹底困惑。我決定只是對它進行評論,否則就沒有什麼問題了。它結束,吐出output.txt,並且文本文件看起來是完全正確的。我無法弄清楚在沒有別的錯誤的情況下,代碼中的內容會導致它在free()上崩潰。
什麼樣的失敗? – 2011-05-29 00:53:53
Windows只會關閉它,並說「有問題導致程序無法正常工作。」 – Santiclause 2011-05-29 01:09:29