Alocar uma matriz 2d em C com uma dimensão fixa

Eu quero alocar dinamicamente uma dimensão de um array 2D (a outra dimensão é dada). Isto funciona:

int NCOLS = 20;

// nrows = user input...

double *arr[NCOLS];

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

e libertá-lo:

free(arr)