Asigne una matriz 2d en C con una dimensión fija

Quiero asignar dinámicamente 1 dimensión de una matriz 2D (se da la otra dimensión). Esto funciona:

int NCOLS = 20;

// nrows = user input...

double *arr[NCOLS];

arr = (double *)malloc(sizeof(double)*nrows);

y para liberarlo:

free(arr)