Wypełnianie dwuwymiarowej tablicy

0

Witam. Mam problem z wypełnieniem tablicy dwuwymiarowej. Przy próbie wpisania wartości wyrzuca błąd:

"Unhandled exception at 0x00F0229D in rownania_liniowe.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD"
Kod:

class Macierz
{
public:
	int k,l;
	double **tablica;

	Macierz (int k_, int l_)
	{
		k=k_;
		l=l_;
		tablica=new double *[k];
		for (int i=0; i<k; i++)
		{
			tablica[k]=new double [l];
			for (int j=0; j<l; j++)
				tablica[i][j]=0;
		}
    }
};

Obiekt tworzę następująco:

Macierz glowna (5,6);

Próbowałem też wypełniać tablicę poprzez metodę klasy macierz, jednak problem pozostaje taki sam.
Bardzo proszę o pomoc.

dodanie znacznika <code> - @furious programming

1
  1. To kara za bezsensowne nazywanie składowych i zmiennych:
tablica[i]=new double [l];

Nazwij składowe Y,X parametry konstruktora też Y,X zaś zmienne y,x czyli: class Macierz
{
public:
size_t Y,X;
double **tablica;
Macierz(size_t Y,size_t X):Y(Y),X(X)
{
tablica=new double *[Y];
for(size_t y=0;y<Y;++y)
{
tablica[y]=new double [X];
for(size_t x=0;x<X;++x) tablica[y][x]=0;
}
}
};

2. Nie używaj `i++` jeżeli możesz użyć `++i` - ten brzydki nawyk się zemści
3. Zastanów się nad zastosowaniem `vector`'a
4. Zastanów się nad adaptacją jednowymiarowej tablicy: 
```cpp
class Matrix
  {
   public:
   size_t Y,X;
   double **data;
   Macierz(size_t Y,size_t X):Y(Y),X(X),data(new double[Y*X]) { memset(data,0,Y*X*sizeof(double)); }
   ~Macierz() { delete[] data; }
   double *operator[](size_t y) { return data+y*X; }
   const double *operator[](size_t y)const { return data+y*X; }
  };
0

Ale wstyd :D W każdym razie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1