Ich bin nur ein einfacher Code ausgeführt, aber ich bekomme immer "Prozess beendet mit Exit-Code 139 (unterbrochen von Signal 11: SIGSEGV)" Tun einige Debugging, fand ich, dass die Wert der Kanten [0] .start wird irgendwie -2147483644. Ich finde dieses Verhalten ziemlich schwer zu erklären und versuche immer noch herauszufinden, wo ich es falsch verstanden habe, aber ich aktualisiere keine Kantenwerte! Wie auch immer, was immer Sie mir geben können, wird sehr geschätzt. Sie finden den folgenden Code. Vielen Dank im Voraus! warme WünscheC++ Struktur Wert scheint sich zu ändern
#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;
}
Gültige Indizes in 'distance' sind 0 bis 3.' Kanten [e] .start' und 'Kanten [e] .end' haben Werte von 4. Ihr Programm zeigt undefiniertes Verhalten durch Pufferüberlauf. –