приведение char [] [] к char ** вызывает segfault?

Хорошо, мой C немного ржавый, но я подумал, что сделаю свой следующий (маленький) проект на C, чтобы я мог отшлифовать его, и менее 20 строк у меня уже есть ошибка сегмента.

Это мой полный код:

#define ROWS 4
#define COLS 4

char main_map[ROWS][COLS+1]={
  "a.bb",
  "a.c.",
  "adc.",
  ".dc."};

 void print_map(char** map){
  int i;
  for(i=0;i<ROWS;i++){
    puts(map[i]); //segfault here
  }
 }



int main(){
  print_map(main_map); //if I comment out this line it will work.
  puts(main_map[3]);
  return 0;
}

Я полностью сбит с толку относительно того, как это вызывает segfault. Что происходит при кастинге из[][] в**!? Это единственное предупреждение, которое я получаю.

rushhour.c:23:3: warning: passing argument 1 of ‘print_map’ from incompatible pointer type
rushhour.c:13:7: note: expected ‘char **’ but argument is of type ‘char (*)[5]’

Являются[][] а также** действительно несовместимые типы указателей? Они кажутся мне просто синтаксисом.

Ответы на вопрос(1)

Ваш ответ на вопрос