Похоже, что allocate пытается динамически выделить три строки и назначить их каждому члену массива из трех char*
указателей.
Массивы распадаются на указатели, когда вы передаете их как аргументы функции, что вам и нужно, поэтому объявление allocate
должно быть void allocate(char**)
. Передача data
передаст указатель на первый элемент массива, то есть указатель на char*
.
При выделении вам нужно будет выделить немного памяти для новых строк. Я предполагаю, что, поскольку это тестовый пример, вам действительно нужны отдельные копии строк для каждого члена массива.
Конечно, в этот момент вам, вероятно, понадобится функция deallocate
и убедитесь, что она всегда вызывается для выполнения соответствующего free
для новых malloc
s.
void allocate(char** dt)
{
int i;
size_t len;
char buf[] = "A test string";
len = sizeof buf;
for (i = 0; i < 3; i++)
{
dt[i] = malloc(len);
if (dt[i] != NULL)
{
memcpy(dt[i], buf, len);
printf("%s\n", dt[i]);
}
}
}