我有一个问题是我的程序引发访问冲突。通过调试我发现由于某种原因比较器功能为空。但是我不确定为什么会这样或如何解决它。
我创建了一个最小的工作示例来重现该问题:
#include "Tryout.h"
#include <queue>
struct Event {
uint64_t mv_timeout;
};
bool CompareEvents(const Event& a, const Event& b) {
return a.mv_timeout < b.mv_timeout;
}
int main() {
std::priority_queue<Event, std::vector<Event>, decltype(&CompareEvents)> mt_eventQueue;
Event lo_event1{
.mv_timeout = 1,
};
Event lo_event2{
.mv_timeout = 2,
};
mt_eventQueue.push(lo_event1);
mt_eventQueue.push(lo_event2);
return 0;
}
在添加第二个事件时执行它会崩溃。
在 Tryout.exe 中的 0x0000000000000000 处引发异常:0xC0000005:访问冲突执行位置 0x0000000000000000。
如前所述,比较函数似乎为空,即使我通过模板传递它也很难。
这里出了什么问题?