object reference not set to an instance of an object Unity2017.1

Hi, i try call a method in another script, but this return " object reference not set to an instance of an object ", any idea? i am new in unity

Mi code:

EnemyController:

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

public class EnemyController : MonoBehaviour {

    public float speed = 1f;
    public float maxSpeed = 1f;
    private LifeController lc;
    private Rigidbody2D rb2d;
    // Use this for initialization
    void Start () {
        rb2d = GetComponent<Rigidbody2D>();
        lc = gameObject.GetComponent<LifeController> ();
        lc.DecrementHeart ();

    }
   
    // Update is called once per frame
    void FixedUpdate () {
        rb2d.AddForce(Vector2.right * speed);
        float limitSpeed = Mathf.Clamp (rb2d.velocity.x, -maxSpeed, maxSpeed);
        rb2d.velocity = new Vector2 (limitSpeed, rb2d.velocity.y);

        if (rb2d.velocity.x > -0.1f && rb2d.velocity.x < 0.1f) {
            speed = -speed;
            rb2d.velocity = new Vector2 (speed, rb2d.velocity.y);
            transform.localScale = new Vector3 (-speed, 1f, 1f);
        }
    }

    void OnTriggerEnter2D(Collider2D col) {
        if (col.gameObject.tag == "Player") {
            float offsetY = -0.22f;
   
            if (transform.position.y + offsetY < col.transform.position.y) {
                //Destroy (gameObject);
                col.SendMessage ("EnemyJump");
            } else {
                lc.DecrementHeart ();
                col.SendMessage ("EnemyKnockBack", transform.position.x);

            }
        }
    }
}

LifeController:

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

public class LifeController : MonoBehaviour {
    public int nHearts = 5;
    public Image FullHeart;
    public Sprite MiddleHeart;
    public Sprite EmptyHeart;

    // Use this for initialization
    void Start () {
        DrawHearts (nHearts);
    }
   
    // Update is called once per frame
    void Update () {
       
    }

    void DrawHearts(int count) {
        Image temp;

        for (int i = 0; i < count; i++) {
            temp = Instantiate<Image> (FullHeart);
            temp.transform.SetParent(transform, false);
            temp.transform.Translate (0.5f * i, 0, 0);
            temp.name = "Heart" + i;
        }
    }

    public void DecrementHeart() {
        GameObject [] hearts;
        hearts = GameObject.FindGameObjectsWithTag ("Heart");
        for (int i = 1; i < hearts.Length; i++) {
            var Heart = transform.GetChild(nHearts - i).GetComponent<Image> ();

            if (Heart.sprite.name == "Hearts_0") {
                Heart.sprite = MiddleHeart;
                break;
            } else if (Heart.sprite.name == "Hearts_1") {
                Heart.sprite = EmptyHeart;
                break;
            } else if (Heart.sprite.name == "Hearts_2") {
                continue;
            }
        }

    }

}

Are both these scripts on the same object?

Also, always good to tell us where the error points to.

At least tell us which line gives you an error.

If LifeController is a child of EnemyController you should use

lc = gameObject.GetComponentInChildren<LifeController>

So as not to get a reference of a random LifeController in the scene.