NullReferenceException: when using an inherited array

I am writing a dungeon generation script. Each tiles is made up from different types of parts(floor, wall, door, etc…) each type is stored in its own array that is combined into a jagged array. This works as confirmed by the debug statement on line 60 on GeneratorResources.cs Where I am having trouble is when I use the array in my derived class it gives me a

NullReferenceException: Object reference not set to an instance of an object
Dungeon.Start () (at Assets/Generator/Dungeon.cs:22)

Here is the relevent code for Dungeon.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Dungeon : GeneratorResources {
	
	public GameObject start;  //holds the start tile
	public GameObject player; //holds the player pawn
	public int roomSpawnPercent;


	public int maxRoomCount; //Caps the maximum number of rooms, this may change from level to level.
	private int currentRoomCount = 0; //How many rooms have been generated so far.
	
	public List<Transform> exitNodes; //holds the current nodes, will be updated after each iteration of room generation
	
	// Use this for initialization
	void Start () {
		exitNodes = new List<Transform>();
		CreateStart();		
		//SpawnDungeon();
		GameObject spawn = Instantiate(roomResources[0][0], Vector3.up, Quaternion.identity) as GameObject;

		
	}

And the code for GeneratorResources.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GeneratorResources : MonoBehaviour {

	//Hall resources///////////////////////
	public const int NUMBER_OF_HALL_RESOURCES = 2;
	public List<GameObject> halls;
	public List<GameObject> hallWalls;
	///////////////////////////////////////
    public GameObject[][] hallResources;
	
	//room resources/////////////////////
	public const int NUMBER_OF_ROOM_RESOURCES = 3;
	public List<GameObject> rooms;
	public List<GameObject> roomWallsSolid;
	public List<GameObject> roomWallsDoor;
	/////////////////////////////////////
	public GameObject[][] roomResources;
	
	// Use this for initialization
	void Awake () {
		//add each hall resource List<> here///////////////////////////////////////////////////     

        GameObject[][] hallResources = new GameObject[NUMBER_OF_HALL_RESOURCES][];

        

        hallResources[0] = new GameObject[halls.Count];

        hallResources[1] = new GameObject[hallWalls.Count];

        

        halls.CopyTo(hallResources[0]);

        hallWalls.CopyTo(hallResources[1]);

        ////////////////////////////////////////////////////////////////////////////////////////

        

        //add each room resource List<> here////////////////////////////////////////////////////

        GameObject[][] roomResources = new GameObject[NUMBER_OF_ROOM_RESOURCES][];

        

        roomResources[0] = new GameObject[rooms.Count];

        roomResources[1] = new GameObject[roomWallsSolid.Count];

        roomResources[2] = new GameObject[roomWallsDoor.Count];

        

        rooms.CopyTo(roomResources[0]);

        roomWallsSolid.CopyTo(roomResources[1]);

        roomWallsDoor.CopyTo(roomResources[2]);
		
		Debug.Log(roomResources[0][0] + " | " + roomResources[0][1]);

        ////////////////////////////////////////////////////////////////////////////////////////

	}
	// Update is called once per frame
	void Update () {
	
	}	
	
}

Ok, found the answer but don’t know why. instead of initializing the lists in the awake() function I initialized them in the declaration. Then no error.

/// Generator resources.
/// 
/// This script handles all the list<>s used to store the GameObjects that the generator can choose from to generate the dungeon.
/// </summary>

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GeneratorResources : MonoBehaviour {

	//Hall resources///////////////////////
	public const int NUMBER_OF_HALL_RESOURCES = 2;
	public List<GameObject> halls = new List<GameObject>();
	public List<GameObject> hallWalls = new List<GameObject>();
	///////////////////////////////////////
    public List<List<GameObject>> hallResources = new List<List<GameObject>>();
	
	//room resources/////////////////////
	public const int NUMBER_OF_ROOM_RESOURCES = 3;
	public List<GameObject> rooms = new List<GameObject>();
	public List<GameObject> roomWallsSolid = new List<GameObject>();
	public List<GameObject> roomWallsDoor = new List<GameObject>();
	/////////////////////////////////////
	public List<List<GameObject>> roomResources = new List<List<GameObject>>();
	
	// Use this for initialization
	void Awake () {
		//add each hall resource List<> here///////////////////////////////////////////////////    

		hallResources.Add(halls);
		hallResources.Add(hallWalls);
        ////////////////////////////////////////////////////////////////////////////////////////

        

        //add each room resource List<> here///////////////////////////////////////////////////
		
		roomResources.Add(rooms);
		roomResources.Add(roomWallsSolid);
		roomResources.Add(roomWallsDoor);

        ////////////////////////////////////////////////////////////////////////////////////////

	}
	// Update is called once per frame
	void Update () {
		
	}	
	
}