آیا این هم درست است.
نه درست نیست خود اشاره گر هم به نوعی متغیره بوده که اندازه آن 4 بایت هست.
شما در فوق حافظه ای را برای ایندکس اول اشاره گر که باید محتوایش آدرس باشد رزرو کردید که مقدارش 20 بایت هست ولی از انجایی که اگر اشاره گر به یک خانه از حافظه اشاره کند احتیاج به 4 بایت دارد لذا باید برای هر اشاره گر حافظه 4 بایتی رزور شود نه 1 بایتی.
ولی کد شما میتواند با اصلاح زیر هم درست عمل کند.

char **a;
// create
a = new char[20*4]; // اصلاح
for( int i=0; i<20; i++)
a[i] = new char [1];
// delete
for(i=0; i<20; i++)
delete [] a[i];
delete [] a;