title: Can't understand this error while freeing memory in C
body: <p>I don't understand why I m am getting a segmentation fault inside the free_memory function. Here is the program:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  
  void allocate_memory (char **cells)
  {
      int i;
  
      cells = (char **) malloc(9 * sizeof(char *));
      if (cells == NULL)
      {
          perror("Couldn't allocate memory");
          exit(1);
      }
  
      for (i = 0; i &lt; 9; i++)
      {
          cells[i] = (char *) malloc(9 * sizeof(char));
          if (cells[i] == NULL)
          {
              perror("Couldn't allocate memory");
              exit(1);
          }
  
          memset(cells[i], 1, 9);
      }
  }
  
  void free_memory (char **cells)
  {
      int i;
  
      for (i = 0; i &lt; 9; i++)
      {
          free(cells[i]);
      }
  
      free(cells);
  }
  
  int main (int argc, char *argv[])
  {
      char **cells = NULL;
  
      allocate_memory(cells);
      printf("Allocated\n");
      free_memory(cells);
  
      return 0;
  }
  </code></pre>
  
  <p>The debugger shows this message about the error:</p>
  
  <pre><code>Process 1433 launched: '/Users/Jaime/Documents/workspaceC/PruebasC/PruebasC/sk' (x86_64)
  Allocated
  Process 1433 stopped
  * thread #1: tid = 0x1058a, 0x0000000100000e95 sk`free_memory + 37, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
      frame #0: 0x0000000100000e95 sk`free_memory + 37
  sk`free_memory:
  -&gt;  0x100000e95 &lt;+37&gt;: movq   (%rcx,%rax,8), %rdi
      0x100000e99 &lt;+41&gt;: callq  0x100000f20               ; symbol stub for: free
      0x100000e9e &lt;+46&gt;: movl   -0xc(%rbp), %eax
      0x100000ea1 &lt;+49&gt;: addl   $0x1, %eax
  </code></pre>
  
  <p>I hope anyone can help me, I don't get why I am accessing a bad pointer.</p>