Here is a very abridged excerpt from a simple matrix manipulation library I'm writing, mostly as a practice project.

If I was to write this:Code:class matrix { public: double **a; int row, col; matrix (){}; matrix (double *,int,int); matrix & operator = (const matrix &); }; //constructor for matrix. matrix::matrix(double *input, int inrow, int incol) { row = inrow; col = incol; a = new double*[row]; for(int i=0;i<row;i++) a[i] = new double[col]; if(input != NULL) for(int i=0;i<row;i++) for(int j=0;j<col;j++) a[i][j] = *(input + (col*i) +j); else for(int i=0;i<row;i++) for(int j=0;j<col;j++) a[i][j] = 0; } //Overloaded = operator, simply checks matrices are of equal size and then //copies elements from right to left. matrix & matrix::operator = (const matrix &rhs) { if(this == &rhs) return (*this); //not strictly necessary, I know. if(row == rhs.row && col == rhs.col){ for(int i=0;i<row;i++) for(int j=0;j<col;j++) a[i][j]= rhs.a[i][j]; return (*this); } }

am I writing into memory I don't own?Code:matrix test1 (some_array, rows, columns) matrix test2 = test1; //here matrix test3; test3 = test1;//here

It seems to me the the default constructor is called, which includes no memory allocation, and then I'm assigning data //here into memory I don't own.

However, I don't think I really understand the whole constructor business, and I don't get any errors at compile or runtime.