Полагаю, вы имеете в виду что-то вроде следующего.
Обратите внимание, что "const" в виде строки является "const char *", а не "char *".
#include <malloc.h>
#include <stdio.h>
const char ***allocate(int lin, int col){
int index = lin;
const char ***map = (const char*** ) malloc(sizeof(char**) * lin);
for(int i = 0; i < index; i++){
map[i] = (const char**) malloc(sizeof(char*) * col);
}
return map;
}
void **fill(const char ***map, int index){
printf("index: %d\n", index);
for(int i = 0; i < index; ++i){
for (int j = 0; j < index; ++j){
map[i][j] = "aaaaaaaaa";
printf("%s ", map[i][j]);
}
printf("\n");
}
}
int main(){
const char ***map = allocate(5,5);
printf("\n");
fill(map,5);
return 0;
}
Вызовmalloc это много раз и наличие такого высокого уровня косвенности делает очень неэффективное кодирование.
В этом случае достаточно создать постоянный массив 5x5 из const char *
int main() {
const char *map[5][5];
for (int i = 0; i != 5; ++i) {
for (int j = 0; j != 5; ++j) {
map[i][j] = "I should write my own assignment.";
}
}
}