It's still a little difficult to tell what's going on, even with the image, but I'll take a stab at it.
I think you're seeing an interaction between the shrinkwrap modifier and the array modifier. It's a little complicated, so I'll try to be clear.
The relative offset will move the next item in the array by a multiple of that item's own size. In your case, it moves "the item's z height * 1.0" So, if your item's height were to change, the next item in the list would still be exactly on top of it, because it's moving "one item's height." If you change that multiple to anything bigger than 1, you'll have a gap.
This works fine when each version of your array is the same. BUT you have a shrinkwrap modifier, which can change the size and shape of your mesh, if it needs to. It looks like your shrinkwrap is "reaching" to wrap itself to the nearest thing it can find. This makes your mesh bigger. Now "one item height" is much bigger than it used to be. Now it has to offset a lot more on the z-axis to get the next item ontop of the previous one.
To test this, change the windows that are working from relative offset to absolute offset. Find an absolute offset amount that gets those windows stacked correctly. Then change the other windows to absolute, and use the same amount. If I'm right, you should see all the windows stacking correctly.
Unfortunately, I don't think this will solve your problem. The real solution will be to get your shrinkwrap under control so that it's behaving correctly. If you fix that, then you can use relative or absolute and get the same result.