Witam!
Piszę grę która będzie wczytywała dane z pliku binarnego. Wykorzystałem kod z symfoni , przerobiłem do własnych potrzeb jednak mam problem gdyż jak mam przeładowany operator aby odnosić sie do pliku obiekt[][] . Problem polega na tym że elementy od obiekt[0][0] do obiekt.[0][wymiar] są jak gdyby nie zainicjowane w pliku (wywala krzaki ze tak powiem). Poniżej umieszczam kod z symfoni gdyż wystepuje w nim ten sam "bład" .
z gory dziekuje za pomoc.

//***************************************************
// Program z paragrafu 22.19 (str 1138)
//***************************************************

// Sprawdzony na Linuksie, kompilator: GNU gcc version 3.3.3 (SuSE Linux)
// Sprawdzony na Windows XP, kompilator: Microsoft Visual C++ 6.0

#include <iostream>
#include <fstream>
#include <cstdlib> // dla exit()
#include <string>
using namespace std;
////////////////////////////////////////////////////////
class duza_tablica// `1
{
string nazwa_pliku; // nazwa pliku dyskowego
fstream plik;

const int rozmiar;

int *	linijka;          // linijka w zapasie pamięci
long	dlug_linijki;
int		nr_obecnego;          // nr wiersza nad którym pracujemy

public:
duza_tablica(string nazwa_pliku, int wym, int wypelniacz = 0);
~duza_tablica();

int * operator[](int wiersz);

private:
void error();
};
/*******************************************************/
duza_tablica::duza_tablica(string nazwa, int wym,
int wypelniacz)
: rozmiar(wym), nazwa_pliku(nazwa)// 2 { plik.open(nazwa.c_str(), ios::in | ios::out | ios::binary);// 3

if(!plik)
{
	cout << "Blad otwarcia pliku " << nazwa_pliku << endl;
	error();
}

linijka = new int[rozmiar];// `4
dlug_linijki = rozmiar * sizeof(int);


nr_obecnego = 0;

}
/*******************************************************/
duza_tablica::~duza_tablica()// `6
{
// skoro koniec, to musimy odesłać na dysk wiersz,
// ktory jest jeszcze w tablicy linijka

if(! plik.seekp(nr_obecnego * dlug_linijki)) 
{
	cout << "Blad pozycjonowania "
		"wskaznika pisania\n";
	error();
}
// zapisanie tam ---------
if(!plik.write( (char*)linijka , dlug_linijki) )
{
	cout << "Blad przy odsylaniu\n";
	error();
}

plik.close();        // zamknięcie pliku
delete [] linijka;     // zwolnienie rezerwacji

}
//
// przeładowanie operatora []
/
/
int * duza_tablica::operator[](int nr_wiersza_chcianego)
{// `7

//===========================================
// moze dany fragment tablicy jest pod ręką ?
//===========================================
if(nr_wiersza_chcianego == nr_obecnego)
{
	return linijka;    // tak, to nic nie trzeba robić !
}

//===============================================
// jesli nie, to najpierw odsyłamy obecny wiersz=
// ==============================================
// obliczenie, gdzie go posłać
if(! plik.seekp(nr_obecnego * dlug_linijki)) 
{
	cout << "Blad pozycjonowania wskaznika pisania\n";
	error();
}
// zapisanie tam -------------------------
if(!plik.write( (char*)linijka , dlug_linijki) )
{
	cout << "Blad przy odsylaniu\n";
	error();
}
// ===================================
// sprowadzamy potrzebny wiersz    ===
// ===================================
// obliczenie, gdzie on w pliku jest

if(! plik.seekg(nr_wiersza_chcianego * dlug_linijki))
{
	cout << "Blad pozycjonowania wskaznika czytania"
		<< nr_wiersza_chcianego * dlug_linijki
		<< endl;
	error();
}

// przeczytanie tego fragmentu ------------------------
if(!plik.read( (char*) linijka, dlug_linijki) )
{
	cout << "Blad czytania wiersza "
		<< nr_wiersza_chcianego << endl;
	error();
}

// uaktualnienie notatek
nr_obecnego = nr_wiersza_chcianego;

// zwracamy wskaźnik do tablicy roboczej
return linijka;

}
//
void duza_tablica::error()
{
if(plik.eof()) cout << "Koniec pliku ";
if(plik.fail())
cout << " -FAIL strumienia do pliku : "
<< nazwa_pliku << endl;
exit(1);
}
/
/
int main()// `8
{
int i, k;
const int wymiar = 13

duza_tablica t("macierz.tmp", wymiar);// `9


// wpisanie jakichś danych do tablicy t
for(i = 0; i < wymiar; i++)
	for(k = 0; k < wymiar; k++)
		t[i][k] = i * 100 + k;// `10
	
	cout << "Element t [24][7] ma wartosc = "
		<< t [24][7] << endl;// `11
	
	// -------------------------------------------
	cout << "Przykladowo robimy transpozycje " <<endl;
	
	duza_tablica m("macierz1.tmp", wymiar);// `12
	for(i = 0; i < wymiar; i++)
		for(k = 0; k < wymiar; k++)
			m[i][k] = t[k][i];// `13
		
		cout << "transpozycja skonczona, oto rezultat\n"
			"Przykladowo elementy t[7][31] = " << t[7][31]
			<< ", \tt[31][7] = " << t[31][7] << endl;
		
		cout << "  Natomiast elementy m[7][31] = " << m[7][31]
			<< ", \tm[31][7] = " << m[31][7] << endl;

}
//************************************************************