С
char **cmdArray
у вас есть указатель на указатели. Но указатель не имеет допустимого значения. Используйте malloc
, чтобы зарезервировать место для нескольких указателей и присвоить это значение указателю
cmdArray = malloc(20 * sizeof (char*));
Теперь cmdArray
указывает на область из 20 указателей. Но ни один из этих 20 указателей не имеет действительного значения. Вам нужно выделить место для каждого из этих 20 указателей
for (k = 0; k < 20; k++) {
cmdArray[k] = malloc(BUFSIZ);
}
Теперь вы готовы идти:)
cmdArray
указывает на 20 действительных указателей, и каждый из этих указателей указывает на область памяти, способную содержать символы BUFSIZ (или строки длиной до BUFSIZ - 1
).
Чтобы освободить место, вам нужно сделать наоборот: сначала 20 указателей, а затем указатель на указатели
for (k = 0; k < 20; k++) {
free(cmdArray[k]);
}
free(cmdArray);
Не забудьте проверить возвращаемое значение malloc
перед использованием памяти для реального