关于二维数组的动态开辟后的调用有关问题

关于二维数组的动态开辟后的调用问题
在vc++2003中,动态开辟了一个二维数组
int   **testArray   =   new   int   *[Width];
for(int   i   =   0;   i   <   Width;   i++)
{
testArray[i]   =   new   int[Height];
memset(testArray[i],0,Height*sizeof(int));
}
然后调用时出现问题,我是这样调用的:
reInitialize(testArray[0],Width,Height)

函数部分:
void   reInitialize(int   *testArray,int   Width,int   Height)
{
for   (i=0;   i <Width;   i++)
for   (j=0;   j <Height;   j++)
                                    {
                                            testArray[i*nHeight+j]=999;//此处简化步骤,表意即可
                                    }

}


最后返回主函数后的结果是有一部分testArray[i][j]没有被赋值为999;
想请问这里有错误么?

------解决方案--------------------
直接用stl不是很好吗?
vector < vector <int> > arr(n, vector(n,0));
------解决方案--------------------
void reInitialize(int *testArray,int Width,int Height)
{
for (int i=0; i <Width; i++)
for (int j=0; j <Height; j++)
testArray[i*Height+j]=9;//此处简化步骤,表意即可

for ( i=0; i <Width; i++)
{
for (int j=0; j <Height; j++)
{
cout < < testArray[i*Height+j] < < "\t ";
}
cout < < "\n ";
}
}
这是对的.