那么,首先,为什么你不使用STL的优先级队列,或者使用多重映射作为优先级队列?它比编写自己的解决方案更好。
接下来,代码结构: std::vector<HeapEntry*> heap; 臭名昭着的是泄漏内存,人们没有删除指向的内存,而当人们试图删除指向的内存并导致错误删除时导致严重的内存故障。
std::vector<HeapEntry*> heap;
该 "IndexedHeap* myHeap;" 很可能不是你的问题。如果有人删除了那些对象,那么引用你不拥有的东西可能是一个问题,但是那时你可能已经停止使用这些条目了。顺便说一句,因为它是一个引用,你应该考虑将它作为一个引用(然后在ctr期间绑定并且永远不会改变) - 但无论如何都要改变代码的安全性。如您所见,指针的dtr对目标没有任何作用。
"IndexedHeap* myHeap;"
你能跑valgrind吗?它很快就解决了这样的问题。其他:
尽量不要删除任何条目,看看是否能够阻止你的错误,如果是这样的话。
您还可以尝试通过打印或全局设置/地图对象跟踪新建和删除的指针。找到这些东西很方便。