Please do this thing.
Debug your application and when you come to the statement:
Result.Insert((*this)[n][m],0,0,n*xrange,m*yrange,xrange,yrange);
check the value of this[n][m] ,
because that is what going as first argument to
void Insert (GPA Source,int xSource, ....)
and which in turn your are trying to access in the statement
(*this)[xHere+n][yHere+m]=Source[xSource+n][ySource+m];