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!