【发布时间】:2017-10-15 00:24:15
【问题描述】:
我只运行了一个简单的代码,但我不断收到“进程完成,退出代码 139(被信号 11 中断:SIGSEGV)” 做一些调试,我发现edges[0].start的值不知何故变成了-2147483644。我发现这种行为很难解释,并且仍然试图找出我在哪里弄错了,但我什至没有更新任何边缘值!无论如何,您能给我的任何提示都会受到极大的重视。您将在下面找到代码。 提前致谢! 温馨的祝福
#include <stdio.h>
#include <climits>
#include "Utils.h"
struct edge {
int start;
int end;
int weight;
};
int main() {
int n = 4;
int m = 4;
edge edges[4] = {
{2,4,5},
{4,1,6},
{1,3,8},
{3,2,-3}
};
int v,e;
int distance[4];
// Step 1: initialize graph
for(v = 0; v < n; v++){
distance[v] = INT_MAX;
}
distance[0] = 0; //source
// Step 2: relax edges repeatedly
for(v = 0; v < n; v++){
for(e = 0; e < m; e++){
if(distance[edges[e].start] + edges[e].weight < distance[edges[e].end] ){ //relax
distance[edges[e].end] = distance[edges[e].start] + edges[e].weight;
}
}
}
// Step 3: check for negative-weight cycles
for(e = 0; e < m; e++) {
if (distance[edges[e].start] + edges[e].weight < distance[edges[e].end]) { //shouldn't be able to relax
std::cout << "Negative cycle detected, please declare war to Paraguay";
}
}
for(v = 0; v < n; v++){
std::cout << distance[v] << std::endl;
}
return 0;
}
【问题讨论】:
-
distance的有效索引为 0 到 3。edges[e].start和edges[e].end的值为 4。您的程序通过缓冲区溢出表现出未定义的行为。
标签: c++ data-structures segmentation-fault