What I have to do is have 2 int array's and total the 2 and display it as array3. The Table.h file was created for us, and I have added the +operator and the print functions. When I run the program it crashes. If I take out the 2 lines in main.cpp that relate to array3, it compiles and displays array1 and array2 fine. Using the debugger, it seems to have an error in the +operator function, but I just cannot figure it out

Code:
//main

#include <iostream>
#include "Table.h"

using namespace std;

int main()
{
	Table<int> array1 (2,3);

	array1 (0,0) = 1;
	array1 (0,1) = 2;
	array1 (0,2) = 3;
	array1 (1,0) = 4;
	array1 (1,1) = 5;
	array1 (1,2) = 6;

	print (array1, 2,3);
	
	Table<int> array2 (2,3);

	array2 (0,0) = 7;
	array2 (0,1) = 8;
	array2 (0,2) = 9;
	array2 (1,0) = 10;
	array2 (1,1) = 11;
	array2 (1,2) = 12;

	print (array2, 2,3);

	Table<int> array3 = array1 + array2;

	print (array3, 2,3);

}
Code:
//Table.h

#ifndef TABLE_H
#define TABLE_H

template<typename T>

class Table
{
public:
	Table();
	Table(int m, int n);
	Table(int m, int n, const T& value);
	Table(const Table<T>& rhs);
	~Table();

	Table<T>& operator = (const Table& rhs);
	Table<T> operator + (const Table& rhs);
	T& operator()(int i, int j);

	int numRows()const;
	int numCols()const;

	void resize(int m, int n);
	void resize(int m, int n, const T& value);
	void print(Table<T>& data, int x, int y);

private:
	void destroy();

private:
	int mNumRows;
	int mNumCols;
	T** mDataMatrix;
};

template <typename T>
Table<T>::Table()
{
	mDataMatrix = 0;
	mNumRows = 0;
	mNumCols = 0;
}

template <typename T>
Table<T>::Table(int m, int n)
{
	mDataMatrix = 0;
	mNumRows = 0;
	mNumCols = 0;
	resize(m, n, T());
}

template <typename T>
Table<T>::Table(int m, int n, const T& value)
{
	mDataMatrix = 0;
	mNumRows = 0;
	mNumCols = 0;
	resize(m, n, value);
}

template <typename T>
Table<T>::Table(const Table<T>& rhs)
{
	mDataMatrix = 0;
	mNumRows = 0;
	mNumCols = 0;
	*this = rhs;
}

template <typename T>
Table<T>::~Table()
{
	//Destroy any previous memory
	destroy();
}

template <typename T>
Table<T>& Table<T>::operator=(const Table& rhs)
{
	//Check for self assessment
   if( this == &rhs ) return *this;

   resize(rhs.mNumRows, rhs.mNumCols);

   for(int i = 0; i < mNumRows; ++i)
      for(int j = 0; j < mNumCols; ++j)
         mDataMatrix[i][j] = rhs.mDataMatrix[i][j];

   return *this;
}

template <typename T>
Table<T> Table<T>::operator + (const Table &rhs)
{
  
	Table<T> sum;

   for(int i = 0; i < mNumRows; ++i)

      for(int j = 0; j < mNumCols; ++j)
      {
         sum.mDataMatrix[i][j] = mDataMatrix[i][j] + rhs.mDataMatrix[i][j];
      }

   return sum;
}

template <typename T>
T& Table<T>::operator()(int i, int j)
{
	return mDataMatrix[i][j]; //Return the ijth table entry
}

template <typename T>
int Table<T>::numRows()const
{
	return mNumRows; //Return number of rows
}

template <typename T>
int Table<T>::numCols()const
{
	return mNumCols; //Return the number of cols
}

template <typename T>
void Table<T>::resize(int m, int n)
{
	resize(m, n, T()); //Call resize and use default constructor T()
	//as a value
}

template <typename T>
void Table<T>::resize(int m, int n, const T& value)
{
	//destroy previous data
	destroy();
	//Save dimensions
	mNumRows = m;
	mNumCols = n;

	//Allocate a row(array) of pointers
	mDataMatrix = new T*[mNumRows];

	//Loop through each pointer in this row array
	for(int i = 0; i < mNumRows; ++i)
	{
		//Allocate a col for the ith row to build the table
		mDataMatrix[i] = new T[mNumCols];

		//Loop through each element in this row[i] and copy value into it
		for(int j = 0; j < mNumCols; ++j)
			mDataMatrix[i][j] = value;
	}
}

template <typename T>
void Table<T>::destroy()
{
	//Does the matrix exist
	if(mDataMatrix)
	{
		//Iterate over each row i
		for(int i = 0; i < mNumRows; ++i)
		{
			//Does the ith col array exist
			if(mDataMatrix[i])
			{
				//Yes delete it
				delete[]mDataMatrix[i];
				mDataMatrix[i] = 0;
			}
		}
		//Now delete the row array
		delete[] mDataMatrix;
		mDataMatrix = 0;
	}
//Table destroyed so dimensions are zero
	mNumRows = 0;
	mNumCols = 0;

}

template <typename T>
void print(Table<T>& data, int x, int y)
{
	for(int i = 0; i < x; ++i)
	{
		cout << "{";
		for(int j = 0; j < y; ++j)
			cout << data(i, j) << " ";
		cout << "}" << endl;
	}
}


#endif