2017-01-21 6 views
0

줄에 NullReferenceException이 표시됩니다.C에서 NullReferenceException 처리

항목 [크기] = 이름; //이 줄은 삽입 함수의 코드 중간에 있습니다.

나는 그것을 얻는 이유를 이해하지만 어떻게 처리합니까?

using System; 
    using System.IO; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace IP01 
    { 
    public class Program 
    { 
    public class MinHeap 
    { 
     static string[] items; 
     int size = 0; 

     static void Main(string[] args) 
     { 
      string[] array = new string[5] { "f", "a", "c", "d", "e" }; 

      Console.Write("Original Array: "); 
      for (int i = 0; i < array.Length; i++) 
       Console.Write(" " + array[i]); 
      Console.WriteLine(); 

      MinHeap heap = new MinHeap(); 
      heap.createHeap(array); 
      heap.sort(); 

      Console.Write("Sorted Array: "); 
      for (int i = 0; i < items.Length; i++) 
       Console.Write(" " + items[i]); 
      Console.WriteLine(); 
     } 



     public void createHeap(string[] array) 
     { 
      if (array.Length > 0) 
      { 
       for (int i = 0; i < array.Length; i++) 
        insert(array[i]); 
      } 
     } 

     public void rebuild(int rootIndex, int n) 
     { 
      int max = 2 * rootIndex + 1; 
      bool larger; 
      int less = string.Compare(items[max], items[max + 1]); 

      if (less < 0) 
       larger = true; 
      else 
       larger = false; 

      bool larger2; 
      int less2 = string.Compare(items[rootIndex], items[max]); 

      if (less2 < 0) 
       larger2 = true; 
      else 
       larger2 = false; 

      if ((2 * rootIndex + 1) < n) 
      { 

       if ((2 * rootIndex + 2) < n) 
       { 
        max = larger ? max + 1 : max; 
       } 

       if (larger2) 
       { 
        string temp; 

        temp = items[rootIndex]; 
        items[rootIndex] = items[max]; 
        items[max] = temp; 

        rebuild(max, n); 
       } 
      } 
     } 

     public void Heap() 
     { 
      size = 0; 
     } 

     public bool isEmpty() 
     { 
      return size == 0; 
     } 

     public void insert(string name) 
     { 
      int child; 
      int parent; 

      items[size] = name; 
      child = size; 
      parent = (child - 1)/2; 

      bool larger3; 
      int less3 = string.Compare(items[parent], items[child]); 

      if (less3 < 0) 
       larger3 = true; 
      else 
       larger3 = false; 

      while (parent >= 0 && larger3) 
      { 
       string temp; 
       temp = items[child]; 
       items[child] = items[parent]; 
       items[parent] = temp; 

       child = parent; 

       parent = (child - 1)/2; 
      } 

      size++; 
     } 

     public void remove() 
     { 
      if (size == 0) 
      { 
       Console.Write("The heap is empty. No object removed.\n"); 
      } 
      else 
      { 
       items[0] = items[size - 1]; 
       size--; 

       rebuild(0, size); 
      } 
     } 

     public void sort() 
     { 
      for (int i = size - 1; i >= 0; i--) 
      { 
       rebuild(i, size); 
      } 

      int last = size - 1; 

      for (int i = 1; i <= size; i++) 
      { 
       string temp; 

       temp = items[0]; 
       items[0] = items[last]; 
       items[last] = temp; 

       last--; 

       rebuild(0, last); 
      } 
     } 
    } 
} 

}

+0

'try-catch'에 대해 읽어보십시오. –

+1

코드 전체를 덤프해서는 안되며 문제를 정확히 찾아내는 데 필요한 모든 것을 수행해야합니다. 즉, 당신이 실제로'items'를 초기화하는 코드 어디에도 보이지 않습니다. – Abion47

+0

향후 질문을 더 잘할 수 있도록 코드 게시에 대한 [MCVE] 지침을 다시 읽으십시오. –

답변

2

당신은 당신의 배열을 초기화하지 않았습니다. 이 시도. 이것이 너에게 도움이 될지도 모른다.

items=new string[]{""}; 
items[size] = name; 
+0

오류가 수정되었습니다. 감사! 그러나 현재 같은 줄에 IndexOutOfRangeException이 처리되지 않는다고 나와 있습니다. – Leslie

+0

초기화하는 동안 쿼터 마크를 사용 했습니까? – kritikaTalwar

+0

예. 나는 네가 쓴 것을 정확히 사용했다. – Leslie