Indexoutofrange cannot locate problem

Hi guys, I am not too sure why my code is being funny. I am not understanding how an indexoutofbounds exception is even occurring.

I have a marks class with this declaration:

	public Sprite markImg;

A markHand with a list of marks:

public List<Mark> markHand = new List<Mark>();

and I made an image controller script to update images on the screen,
under void start I get the error at the markImages[0] = player1Marks.markHand[0].markImg;

void Start () {
		player1Marks = GameObject.Find ("MarkHand1").GetComponent<MarkHand>();
		player2Marks = GameObject.Find ("MarkHand2").GetComponent<MarkHand>();
		player3Marks = GameObject.Find ("MarkHand3").GetComponent<MarkHand>();
		player4Marks = GameObject.Find ("MarkHand4").GetComponent<MarkHand>();
		player1Hand = GameObject.Find("Hand1").GetComponent<Hand>();
		player2Hand = GameObject.Find("Hand2").GetComponent<Hand>();
		player3Hand = GameObject.Find("Hand3").GetComponent<Hand>();
		player4Hand = GameObject.Find("Hand4").GetComponent<Hand>();

		markSlots = new SpriteRenderer[12]; 
		markImages = new Sprite[12];

		markSlots[0] = GameObject.Find("Mark1").GetComponent<SpriteRenderer>();
		markSlots[1] = GameObject.Find("Mark2").GetComponent<SpriteRenderer>();
		markSlots[2] = GameObject.Find("Mark3").GetComponent<SpriteRenderer>();
		markSlots[3] = GameObject.Find("Mark1Panel2").GetComponent<SpriteRenderer>();
		markSlots[4] = GameObject.Find("Mark2Panel2").GetComponent<SpriteRenderer>();
		markSlots[5] = GameObject.Find("Mark3Panel2").GetComponent<SpriteRenderer>();
		markSlots[6] = GameObject.Find("Mark1Panel3").GetComponent<SpriteRenderer>();
		markSlots[7] = GameObject.Find("Mark2Panel3").GetComponent<SpriteRenderer>();
		markSlots[8] = GameObject.Find("Mark3Panel3").GetComponent<SpriteRenderer>();
		markSlots[9] = GameObject.Find("Mark1Panel4").GetComponent<SpriteRenderer>();
		markSlots[10] = GameObject.Find("Mark2Panel4").GetComponent<SpriteRenderer>();
		markSlots[11] = GameObject.Find("Mark3Panel4").GetComponent<SpriteRenderer>();
            //Here
		markImages[0] = player1Marks.markHand[0].markImg;

		markImages[0] = player1Marks.markHand[0].markImg;
		markImages[1] = player1Marks.markHand[1].markImg;
		markImages[2] = player1Marks.markHand[2].markImg;
		markImages[3] = player2Marks.markHand[0].markImg;
		markImages[4] = player2Marks.markHand[1].markImg;
		markImages[5] = player2Marks.markHand[2].markImg;
		markImages[6] = player3Marks.markHand[0].markImg;
		markImages[7] = player3Marks.markHand[1].markImg;
		markImages[8] = player3Marks.markHand[2].markImg;
		markImages[9] = player4Marks.markHand[0].markImg;
		markImages[10] = player4Marks.markHand[1].markImg;
		markImages[11] = player4Marks.markHand[2].markImg;

		updateImages ();
	}

In the inspector the markHand already has the mark lists, therefore getting the element from mark, the sprite should received but isn’t.

Actual Error message:

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index
System.Collections.Generic.List`1[Mark].get_Item (Int32 index) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:633)
MarkImageController.Start () (at Assets/Scripts/MarkImageController.cs:114)

I don’t see that you ever put anything in the list.

With nothing in the list List[0] is out of range because there is nothing to refer to at that slot.

Well, if you get an out of bounds exception on line 27 it’s obvious that the list is simply empty. When you print:

Debug.Log("player1 marks: " + player1Marks.markHand.Count);

it will return “0”. How is the markHand List filled? Have you assigned elements in the inspector at edit time or do you fill it manually? If you do it manually it’s most likely the execution order.