Olá.
Sobre este trecho do código:
//--Alocação dinâmica de memória-----------------------
mapa = malloc(sizeof(char*) * linhas);
for (int i = 0; i < linhas; i++){
mapa[i] = malloc(sizeof(char) * (colunas+1));
}
//-----------------------------------------------------
No vídeo é explicado que o colunas+1 é para considerar o \n. O \n não é apenas uma sinalização para que o fscanf pare de ler a linha? Assim, o \n em teoria nunca seria armazenado na variável destino.
Testei o código sem somar 1 à variável coluna, e ele compilou e rodou corretamente.