Ho un problema nell'indicizzazione di una matrice.
codice:
#include <iostream>
using namespace std;

enum colore{bianco=0, grigio, nero};

class Canvas{
	int m, n;
	colore** col;

	friend ostream& operator<<(ostream&, const Canvas&);
public:
	Canvas(int, int);
	~Canvas();
	Canvas& operator=(const Canvas&);
	bool clear(int, int);
	void darken(int, int);
};

ostream& operator<<(ostream& os, const Canvas& ca){
	for(int i=0; i<ca.n; i++)
	{
		for(int j=0; j<ca.m; j++)
		{
			if(ca.col[i][j]==0)
				os << ". ";
			if(ca.col[i][j]==1)
				os << "G ";
			if(ca.col[i][j]==2)
				os << "N ";
		}
		os << endl;
	}
	return os;
}				

Canvas::Canvas(int i, int j){
	m=i;
	n=j;
	col=new colore*[m];
	for(int i=0; i<m; i++)
		col[i]=new colore[n];
	for(int i=0; i<m; i++)
	{
		for(int j=0; j<m; j++)
			col[i][j]=bianco;
	}
}			

Canvas::~Canvas(){
	for(int i=0; i<m; i++)
		delete[] col[i];
	delete[] col;
}	

Canvas& Canvas::operator=(const Canvas& ca){
	if(this==&ca)
		return *this;
	for(int i=0; i<m; i++)
		delete[] col[i];
	delete[] col;
	m=ca.m;
	n=ca.n;
	col = new colore*[m];
	for(int i=0; i<m; i++)
		col[i]=new colore[n];
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<m; j++)
			col[i][j]=ca.col[i][j];
	}
	return *this;
}		

bool Canvas::clear(int i, int j){
	if(i>m || j>n)
		return false;
	if(col[i][j]==bianco)
		return false;
	else
		col[i][j]=bianco;
	return true;	
}		

void Canvas::darken(int i, int j){col[i][j]=nero;}

int main(){
	Canvas c(9,4);
	cout << c << endl;
	c.darken(1,1);
	cout << c << endl;
	return 0;
}
La classe Canvas gestisce una matrice dinamica. La funzione darken dovrebbe cambiare lo stato delle "caselle" della matrice da bianco a nero. Ma con mia sorpresa l'output è il seguente:

codice:
[Session started at 2008-12-23 15:42:45 +0100.]
. . . . . . . . . 
. . . . . . . . . 
. . . . . . . . . 
. . . . . . . . . 

. . . . . N . . . 
. N . . . . . . . 
. . . . . . . . . 
. . . . . . . . . 

The Debugger has exited with status 0.
Mi sarei aspettato che l'unica modifica fosse quella della casella indicizzata con (1,1) invece come potete osservare non è così.
Ringrazio chi mi aiuterà.