Trying to name a gameObject - loop suddenly exiting.

Hoping you can help! Comments in code. Any help appreciated.

for (int t = 0; t < atomcount; t++) {
			if (element [t] == "C" && chain[t] == "A") {
				atom = Instantiate (carbon, new Vector3 (x[t] / scale, y[t] / scale, z[t] / scale), Quaternion.identity) as GameObject;
				atom.gameObject.name = (("fred") + atomNumber[t].ToString()); // This line exits the loop!! If I remove this line the whole thing works.
																			// Makes no difference whether I have a simple text name or the atomNumber[t] added
																		 // Also no difference between using 'atom.gameObject.name' or 'atom.name'.
																
//				Debug.Log ("This carbon is from the array " + atomNumber[t]);
//				
//	  			
			} else if (element [t] == "N" && chain[t] == "A") {
				atom = Instantiate (nitrogen, new Vector3 (x[t] / scale, y[t] / scale, z[t] / scale), Quaternion.identity) as GameObject;
			} else if (element [t] == "O" && chain[t] == "A") {
				atom =  Instantiate (oxygen, new Vector3 (x[t] / scale, y[t] / scale, z[t] / scale), Quaternion.identity) as GameObject;
			} else if (element [t] == "S" && chain[t] == "A") {
				atom = Instantiate (sulfur, new Vector3 (x[t] / scale, y[t] / scale, z[t] / scale), Quaternion.identity) as GameObject;	
			}
		}

you should name the transform…not the object. try this:

// name a transform reference
atom.name = ("fred" + atomNumber[t].ToString());

// name a gameobject reference
atom.transform.name = ("fred" + atomNumber[t].ToString());