Search code examples
carrayspointersfreedouble-pointer

Free a double pointer in C


I have two functions to create arrays.

double *Array1D (int nx, int dsize) {
  double *v;
  v = calloc(nx, dsize);
  return v;
}

double **Array2D (int ny, int nx, int dsize) {
  double **v; int j;
  for (j = 0; j < ny; j++)
    v[j] = Array1D(nx, dsize);
  return v;
}

int i, j;
pn = Array2D (ny, nx, sizeof(double));
for (j = 0; j < ny; j++)
  for (i = 0; i < nx; i++)
    pn[j][i] = 1.0 + (i + j * nx) * 1.0;

for (i = 0; i < ny; i++)
  free(pn[i]);
free(pn);

The array elements get initialized properly, but freeing them creates a segmentation fault.

Error:

*** glibc detected *** ./array_test: free(): invalid pointer: 0x00007fff00d42a4f ***
Segmentation fault (core dumped)

Solution

  • double **Array2D (int ny, int nx, int dsize)
    {
      double **v; int j;
      for (j=0; j<ny; j++) v[j] = Array1D(nx, dsize);
    

    v object is never initialized in your function.