How to make a smooth mesh
You need to delete all faces that are going to be hidden by the Array modifier (selected on the screenshot, delete them on both sides of the object). Then enable the "merge" option in the modifier settings.

Normally, this is the way I'd be going for. Sadly, I can't tell you why the subsurf modifier messes up in this mesh. But if you put a fairly high Crease amount on most of the edges (except those that should be smoothed) it works fine.

If you are looking from your object from a distance, the Edge split modifier will do the trick. If you have some spare render time, go for a Subsurf and eventually then a Bevel modifier.