C++ 由constom函数引起的运行时错误

C++ 由constom函数引起的运行时错误,c++,gdb,runtime-error,C++,Gdb,Runtime Error,我在尝试完成tsp问题的a*算法时遇到了一些运行时错误。程序不想进入主功能。这是我的代码,很长 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; constexpr const size\u t R=200;//最大顶点数 对坐标[R]{{1,1},{2,2},{1,2},{0,0}; //双线程的索引最小优先级队列 类IndexMinPQ{ 私人: 常量大小\u t最大值; 尺寸; 尺寸*pq,*qp; 双*元素; 空隙交换(尺寸i、尺寸j){ 互换(pq[i],p

我在尝试完成tsp问题的a*算法时遇到了一些运行时错误。程序不想进入主功能。这是我的代码,很长

#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
constexpr const size\u t R=200;//最大顶点数
对坐标[R]{{1,1},{2,2},{1,2},{0,0};
//双线程的索引最小优先级队列
类IndexMinPQ{
私人:
常量大小\u t最大值;
尺寸;
尺寸*pq,*qp;
双*元素;
空隙交换(尺寸i、尺寸j){
互换(pq[i],pq[j]);
互换(qp[pq[i]],qp[pq[j]];
}
虚空游泳(尺码k){
而(k>1&&elem[pq[k/2]]>elem[pq[k]]){
行政会议(k,k/2);
k=k/2;
}
}
空水槽(尺寸k){
而(2*k元素[pq[j+1]]++j;
如果(elem[pq[k]]=maxN)抛出无效的_参数(“索引>=capacity:+to_字符串(i));
}
公众:
IndexMinPQ(尺寸最大值)
:maxN(maxN),n(0),pq(新尺寸[maxN+1]),qp(新尺寸[maxN+1]),
元素(新双精度[maxN+1]){
对于(size_t i=0;i wei;}
size_t No()常量{return No;}
size_t otor()常量{return v;}
大小\u t其他(整数顶点)常数{
如果(顶点==v)
返回w;
else if(顶点==w)
返回v;
其他的
抛出无效的_参数(“不一致的边”);
}
};
类图{
私人:
const size_t V;//顶点数
const size_t E;//边数=V*(V-1)/2
边*边;//所有边
向量*Adj;//调整表
公众:
图(大小):V(V),E(V*(V-1)/2),Adj(新向量[V]){
分配器alloc;//分离内存分配和项构造
边=分配分配(E);
尺寸=0;
对于(尺寸i=0;i=e)
抛出无效的_参数(“索引>=edges:V*(V-1)/2=“+to_字符串(E));
返回边[e];
}
内联常量向量和调整(大小)常量{
如果(v>=v)抛出无效的_参数(“index>=vetexs:+to_字符串(v));
返回Adj[v];
}
};
结构辅助{
常数图&G;
向量路径;
布尔*标记;
IndexMinPQ-pq;
双区;
双重评价;
辅助(常数图和G)
:G(G),标记(新布尔[G.sizeV()]),pq(G.sizeE()),距离(0),评估(0){
对于(大小i=1;ibool{return lhs->evaluate>rhs->evaluate;};
优先级队列pq(cmp);
Aux*t=新的Aux(G);
质量推力(t);
while(true){
Aux*a=pq.top();
pq.pop();
如果(a->path.size()==G.sizeV())返回a->path;
size_t v=a->path.back();
用于(尺寸索引:G.adj(v)){
const-Edge&e=G.getEdge(ind);
尺寸w=e.other(v);
如果(!a->标记为[w]){
Aux*t2=新的Aux(*a,e);
pq.push(t2);
}
}
删除一条;
}
//抛出运行时_错误(“无法到达”);
返回向量();
}
int main(){
//AStar(图(4));
系统(“暂停”);
返回0;
}
编辑者什么也没说但是, 它不会转到main函数并在屏幕上闪烁。我试图设置断点,但没有成功,gdb说:

(gdb) r
Starting program: D:\cs\c++\exercise\source3.exe
[New Thread 8152.0x1aec]
[New Thread 8152.0x3254]
[New Thread 8152.0x1740]
[New Thread 8152.0x288]
Mingw-w64 runtime failure:
  Unknown pseudo relocation protocol version 256.
[Thread 8152.0x3254 exited with code 3]
[Thread 8152.0x1740 exited with code 3]
[Thread 8152.0x288 exited with code 3]
[Inferior 1 (process 8152) exited with code 03]
但是,在我对函数AStar(第191-213行)进行注释后,问题消失了。问题是什么?

您在空向量上调用
back()
。但是在发布之前请使用(好的)调试器!GDB很好,但不太容易使用

size_t v = a->path.back();

由于您显然已经在使用调试器,您是否也尝试逐行遍历该代码,以确定运行时错误的确切来源(行)?什么是constom BTW?