我正在使用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