Witam. Mam problem z moim kodem, którego nie potrafię sam zdiagnozować, dlatego proszę o pomoc. Otóż piszę program mający wykonać kilka algorytmów na grafach, do tego potrzebuję wczytać z pliku dane do takiego grafu. Plik z danymi wygląda według opisu - pierwsza linia to dane ogólne oddzielone spacjami:
liczba_krawedzi liczba_wierzcholkow pierwszy_wierzcholek ostatni_wierzcholek
kolejne linie to dane kolejnych krawędzi:
wierzchołek_startowy wierzcholek_koncowy waga
W przypadku gdy do pliku wpisuję: liczba wierzchołków 8, a liczba krawędzi 13 lub mniejsza, wszystko działa dobrze. Gdy tylko liczbę krawędzi zmienię 14 lub większą program wysypuje się (w miejscu które zaznaczyłem w kodzie niżej), przy czym zaznaczam, że danych w pliku wystarczyłoby na 16 krawędzi. Visual nie wskazuje żadnego błędu w kodzie, po prostu w trakcie działania program jest przerywany i otwiera mi się kod pliku osfinfo.c i linie generujące błąd to rzekomo funkcje int __cdecl __lock_fhandle lub void __cdecl _unlock_fhandle, zamiennie.
Warto zaznaczyć, że reprezentacja listowa tego samego grafu, w tym samym pliku, na 16 krawędzi, działa bez problemu.
Oto problematyczny fragment kodu:
#include "StdAfx.h"
#include "ArrayGraph.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include "Heap.h"
#include "DSStruct.h"
using namespace std;
void ArrayGraph::load(){
int v1,v2,waga;
fstream plik;
plik.open("test.txt", ios::in);
if (plik.is_open()) {
plik >> lkraw >> lwierzch >> first >> last;
skierowany = new int * [lwierzch];
nieskierowany = new int * [lwierzch];
for(int i = 0; i < lwierzch; i++) {
skierowany[i] = new int [lwierzch];
nieskierowany[i] = new int [lwierzch];
}
for(int i = 0; i < lwierzch; i++) {
for(int j = 0; j < lkraw+1; j++) skierowany[i][j] = 0;
for(int j = 0; j < lkraw+1; j++) nieskierowany[i][j] = 0;
}
for(int i = 0; i < lkraw; i++) {
//w tym momencie wykonanie programu sie przerywa
plik >> v1 >> v2 >> waga;
skierowany[v1][v2] = waga;
nieskierowany[v1][v2] = waga;
nieskierowany[v2][v1] = waga;
}
plik.close();
}
else cout << "Blad. Nie znaleziono pliku.";
}
Zawartość test.txt z danymi dla grafu, działającego dla listy sąsiedztwa i niedziałającego dla macierzy:
16 8 1 7
0 1 5
0 6 3
2 4 4
2 6 5
3 6 8
4 6 1
4 5 2
5 6 6
6 7 9
0 3 9
1 2 9
1 5 6
1 4 8
1 7 7
2 7 3
2 3 9
Bardzo prosiłbym o rady, jak mogę naprawić ten błąd. Z góry dziękuję i pozdrawiam!