Why is my public static List<> populated with null objects upon instantiation?

I am having a very strange problem. In my game there is a public static list in an unattached script named Global:

public class Global: MonoBehaviour
{
	public static int scoreHigh = 0;
	public static int scoreLast = 0;
	
	public static List<Transform> entities = new List<Transform>();
	
}

Every time another script spawns a mobile entity in the game, it is added to this list. For example, the script that creates the player’s ship contains this:

	List<Transform> entities = Global.entities;
	
	void Start ()
	{
		shipPlayer = (GameObject)Instantiate(prefabShipPlayer);
		shipPlayer.AddComponent<PlayerShipController>();
		entities.Add(shipPlayer.transform);
		
		cameraChase = (GameObject)Instantiate(prefabCameraLevelingChaser);
		cameraChase.GetComponent<LevelingChaser>().target = shipPlayer.transform;
		entities.Add(cameraChase.transform);
		
		Debug.Log("Director Start() End");
		Debug.Log("Entities Count: " + entities.Count);
		foreach(Transform transform in entities)
		{
			Debug.Log(transform);
		}
		Debug.Log("Entities List End");
	}

Among the various services this list is intended to provide is level wrapping, by checking the positions of these transforms every frame in another script:

	List<Transform> entities = Global.entities;
	
	float lengthLevel = 1024f;
	float inRadiusLevel;
	
	
	void Start()
	{
		inRadiusLevel = lengthLevel/2f;
	}
	
	void Update()
	{
		Debug.Log ("New frame wrap");
		foreach(Transform transform in entities)
		{
			if(transform == null)
			{
				Debug.Log (transform);
			}
			else
			{
				if(transform.position.x > inRadiusLevel)
					transform.position =
						new Vector3(transform.position.x - lengthLevel, transform.position.y, transform.position.z);
				else if(transform.position.x < -inRadiusLevel)
					transform.position =
						new Vector3(transform.position.x + lengthLevel, transform.position.y, transform.position.z);
				
				if(transform.position.y > inRadiusLevel)
					transform.position =
						new Vector3(transform.position.x, transform.position.y - lengthLevel, transform.position.z);
				else if(transform.position.y < -inRadiusLevel)
					transform.position =
						new Vector3(transform.position.x, transform.position.y + lengthLevel, transform.position.z);
			}
		}
		Debug.Log ("Frame wrap end");
	}

None of this is working however. I added the Debug.Log statements you can see above to the code while trying to figure out the source of the problem, and the completely baffling result was that all the code after the program started appeared to be working properly- but that as soon as the game started, 32 null objects were added to the “entities” list, and it’s these null objects that are throwing null reference exceptions and stopping the loops from finishing executing. I have absolutely no idea where these objects could have come from.

If anyone can shed some light on this it will be greatly appreciated.

Make sure all objects that are adding themselves to that list also manage to remove themselves from the list OnDestroy();

Example

private void OnDestroy(){
		entities.Remove(this.transform);
	}

also:
Do this:

	private List<Transform> entities; 
	
	void Start (){
		entities = Global.entities;
		//etc your stuff here
     }