У меня есть процесс, который будет убит сразу после выполнения программы. Это код скомпилированного исполняемого файла, и это небольшая программа, которая считывает несколько графиков, представленных цифрами из стандартного ввода (обычно описательный файл), и находит минимальное связующее дерево для каждого графика с использованием алгоритма Prim (он не показывает результаты все же, он просто находит решение).Убитый процесс SIGKILL
#include <stdlib.h>
#include <iostream>
using namespace std;
const int MAX_NODOS = 20000;
const int infinito = 10000;
int nnodos;
int nAristas;
int G[MAX_NODOS][MAX_NODOS];
int solucion[MAX_NODOS][MAX_NODOS];
int menorCoste[MAX_NODOS];
int masCercano[MAX_NODOS];
void leeGrafo(){
if (nnodos<0 || nnodos>MAX_NODOS) {
cerr << "Numero de nodos (" << nnodos << ") no valido\n";
exit(0);
}
for (int i=0; i<nnodos ; i++)
for (int j=0; j<nnodos ; j++)
G[i][j] = infinito;
int A,B,P;
for(int i=0;i<nAristas;i++){
cin >> A >> B >> P;
G[A][B] = P;
G[B][A] = P;
}
}
void prepararEstructuras(){
// Grafo de salida
for(int i=0;i<nnodos;i++)
for(int j=0;j<nnodos;j++)
solucion[i][j] = infinito;
// el mas cercaano
for(int i=1;i<nnodos;i++){
masCercano[i]=0;
// menor coste
menorCoste[i]=G[0][i];
}
}
void prim(){
prepararEstructuras();
int min,k;
for(int i=1;i<nnodos;i++){
min = menorCoste[1];
k = 1;
for(int j=2;i<nnodos;j++){
if(menorCoste[j] < min){
min = menorCoste[j];
k = j;
}
}
solucion[k][masCercano[k]] = G[k][masCercano[k]];
menorCoste[k] = infinito;
for(int j=1;j<nnodos;j++){
if(G[k][j] < menorCoste[j] && menorCoste[j]!=infinito){
menorCoste[j] = G[k][j];
masCercano[j] = k;
}
}
}
}
void output(){
for(int i=0;i<nnodos;i++){
for(int j=0;j<nnodos;j++)
cout << G[i][j] << ' ';
cout << endl;
}
}
int main(){
while(true){
cin >> nnodos;
cin >> nAristas;
if((nnodos==0)&&(nAristas==0)) break;
else{
leeGrafo();
output();
prim();
}
}
}
Я узнал, что я должен использовать Трассирование, чтобы найти то, что происходит, и это то, что я получаю:
execve("./412", ["./412"], [/* 38 vars */] <unfinished ...>
+++ killed by SIGKILL +++
Killed
Я подножка убунту, и это первый раз, когда я получить этот тип ошибок. Программа должна останавливаться после прочтения двух нулей подряд от ввода, который я могу гарантировать, что у меня есть в графическом описательном файле. Также проблема возникает, даже если я выполняю программу, не делая перенаправление ввода в мой файл графиков.
Ваша логика программы очень сложна. Что сказал ваш отладчик о ситуации? –
Что-то примечание: ваши массивы с фиксированным размером огромны. При запуске вам понадобится «3,2 ГБ» ... Это может быть проблемой. – Mysticial
@ TomalakGeret'kal: логика программы не имеет значения; ничто из этого не выполняется! – Gabe