Unless you just made a large number of typos posting this code, your indexing is sloppy; some of the array elements aren't initialized, some are overwritten and at one point you index out of bounds of the array. That looks like your problem.
m[0][0] = 2 / (right - left);
m[0][1] = 0;
m[0][2] = 0;
m[0][3] = 0;
m[1][0] = 0;
m[1][2] = 2 / (top - bottom); // should probably be m[1][1]
m[1][2] = 0; // immediately overwrites m[1][2]
m[1][3] = 0;
m[2][0] = 0;
m[2][3] = 0; // should probably be m[2][1]
m[2][2] = -1 / (zFar - zNear);
m[2][3] = 0; // again overwrites m[2][3]
m[3][0] = -(right + left) / (right - left);
m[3][4] = -(top + bottom) / (top - bottom); // m[3][4] is out of bounds of the array
m[3][2] = -zNear / (zFar - zNear);
m[3][3] = 1;