Array for glReadPixels

If I make an array like this

GLubyte bufImage[Width][Height][3];

I can pass bufImage as the ‘pixels’ parameter of glReadPixels and then get the values using:

r = bufImage[im_x][im_y][0];
g = bufImage[im_x][im_y][1];
b = bufImage[im_x][im_y][2];

However, if I don’t know Width and Height at runtime, this does not work. I tried to do this:

GLubyte * bufImage = new GLubyte[Width*Height*3];

and access them with

r = bufImage[im_x * Width + im_y * Height];
g = bufImage[im_x * Width + im_y * Height + 1];
b = bufImage[im_x * Width + im_y * Height + 2];

but I must be misunderstanding how these pixels are expected to be ordered… can anyone clarify this?