title: Bad permissions for mapped region at address
body: <p>I am currently working on CS50x problem set 5, Speller. Using valgrind, i get the following error:</p>
  <pre><code>==395== Memcheck, a memory error detector
  ==395== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
  ==395== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
  ==395== Command: ./speller texts/cat.txt
  ==395== 
  ==395== 
  ==395== Process terminating with default action of signal 11 (SIGSEGV)
  ==395==  Bad permissions for mapped region at address 0x601DE8
  ==395==    at 0x401155: add_Node (dictionary.c:75)
  ==395==    by 0x401239: load (dictionary.c:107)
  ==395==    by 0x400944: main (speller.c:40)
  ==395== 
  ==395== HEAP SUMMARY:
  ==395==     in use at exit: 5,328,336 bytes in 95,140 blocks
  ==395==   total heap usage: 95,141 allocs, 1 frees, 5,332,432 bytes allocated
  ==395== 
  ==395== 552 bytes in 1 blocks are still reachable in loss record 1 of 2
  ==395==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
  ==395==    by 0x5258E49: __fopen_internal (iofopen.c:65)
  ==395==    by 0x5258E49: fopen@@GLIBC_2.2.5 (iofopen.c:89)
  ==395==    by 0x4011BE: load (dictionary.c:88)
  ==395==    by 0x400944: main (speller.c:40)
  ==395== 
  ==395== 5,327,784 bytes in 95,139 blocks are still reachable in loss record 2 of 2
  ==395==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
  ==395==    by 0x401118: add_Node (dictionary.c:69)
  ==395==    by 0x401239: load (dictionary.c:107)
  ==395==    by 0x400944: main (speller.c:40)
  ==395== 
  ==395== LEAK SUMMARY:
  ==395==    definitely lost: 0 bytes in 0 blocks
  ==395==    indirectly lost: 0 bytes in 0 blocks
  ==395==      possibly lost: 0 bytes in 0 blocks
  ==395==    still reachable: 5,328,336 bytes in 95,140 blocks
  ==395==         suppressed: 0 bytes in 0 blocks
  ==395== 
  ==395== For counts of detected and suppressed errors, rerun with: -v
  ==395== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
  Segmentation fault
  </code></pre>
  <p>This is my code for the functions load and add_Node:</p>
  <pre><code>// Loads dictionary into memory, returning true if successful else false
  bool load(const char *dictionary)
  {
      FILE *file = fopen(dictionary, &quot;r&quot;);
  
      if (file == NULL)
      {
          return false;
      }
  
      // Set pointers in table to NULL
      for (int i = 0; i &lt; N; i++)
      {
          table[i] = NULL;
      }
      
      char word[LENGTH + 1];  //to hold a word from dictionary
      
      while (fgets(word, LENGTH + 1, file) != NULL)
      {
          int row = hash(word);   // to determine where to store the word
  
          add_Node(row, word);
      }
      
      fclose(file);
  
      return true;
  }
  
  // Adds new node to a list in dictionary
  void add_Node(int row, char word[LENGTH + 1])
  {
      node *newNode = malloc(sizeof(node));
      strcpy(newNode-&gt;word, word);
      
      if (table[row] == NULL)  //if single linked list is empty
      {
          table[row] = newNode;
      }
      else
      {
          node *tmpHead = table[row];   
          table[row] = newNode;
          newNode-&gt;next = tmpHead;
      }
  }
  </code></pre>
  <p>Line 89 corresponds to:</p>
  <pre><code>add_Node(row, word);
  </code></pre>
  <p>Line 105 corresponds to &quot;table[row] = newNode;&quot; in:</p>
  <pre><code>if (table[row] == NULL)  //if single linked list is empty
          {
              table[row] = newNode;
          }
  </code></pre>
  <p>table is a global variable, an array of pointers of type node. I have already verified that row is for sure within the bounds of the array, table. I don't know how to fix this issue. What could the problem be?</p>