Usando realloc (X, 0) em vez de free () e usando malloc com o comprimento de uma string +1

Então eu realmente não sei como colocar o título dessa vez. Em primeiro lugar, gostaria de dizer que vi vários comentários nesta página sobre o aviso se a questão estiver relacionada com "lição de casa". O meu é, mas também está concluído e eu só quero entender melhor o que está acontecendo com o código.

Eu também li posts e livros há algum tempo, mas acho que ainda sinto falta de coisas.

Eu tenho duas linhas de código que não entendo muito bem no código com o qual trabalhei. O trabalho é sobre a obtenção de qualquer arquivo que seja usado como argumento (se forem arquivos 0, leia de stdin) e imprima-o na saída padrão de trás para frente. Tudo isso, falando de C enquanto eu tentava colocar a tag.

Primeiro problema é este:

array = realloc (array, 0);

Onde array é definido como

char **array;

E o problema é que o livre não funciona, ele não libera o espaço usado (talvez eu usei errado? Em outro lugar eu já sabia como usá-lo, mas não dessa vez). Com os testes que fiz e o que li, acredito que o realloc está fazendo o mesmo, mas não sou 100%.

O segundo é:

char* alloc = malloc (strlen ((char*)string)+1);

Onde alloc é usado para copiar o tamanho exato da linha que eu vou colocar em uma matriz, então eu posso, depois disso, apenas imprimir o texto de trás para frente.

E a questão é por que eu tenho que usar esse +1. Quer dizer, se eu não usar por algum motivo, não funciona, eu tentei com números diferentes e funciona sempre, mas se eu não fizer isso, não funciona corretamente.

Eu sei que provavelmente a pergunta é muito vaga e ruim para ser respondida, mas de novo, eu não tenho certeza sobre isso e eu fiz o meu melhor para me explicar (inglês sem língua materna, como é óbvio).

questionAnswers(6)

yourAnswerToTheQuestion