Выполнение 65 распределений принятого ответа будет работать, но если вы заранее знаете длины данных char, вы можете сделать это намного быстрее, сделав что-то вроде этого.
Предположим, что cItems - это целое число, представляющее собой число элементов в вашем массиве, скажем, 64. Предположим, aItemSizes [] содержит длины данных char для каждого элемента в вашем массиве:
int iItem;
char **aItems, *pData;
for (cbCharData=iItem=0; iItem<cItems ; iItem++)
cbCharData += aItemSizes[iItem];
aItems = (char**)malloc(sizeof(char*)*cItems + cbCharData);
for (iItem=0, pData=&aItems[cItems] ; iItem<cItems ; pData+=aItemSizes[iItem], iItem++)
aItem[iItem] = pData;
Теперь aItem [iItem] указывает на область памяти, которая может обрабатывать до символов aItemSizes [iItem], и вам нужно только одно выделение, которое на WAAAAAAAAAAAAAAAAAAAAAAAAAAY быстрее. Я прошу прощения за ошибки компиляции, потому что я не проверял это. Чтобы освободить его, вам нужны только бесплатные элементы.