Hej!
Det första mindre felet är att:
array = (char **) calloc(rows, sizeof(char));
skall vara:
array = (char **) calloc(rows, sizeof(char*));
Men problemet att programmet krashar är att du lagrar indatan från scanf
PÅ platsen där inputData pekar. Genom att du inte har definerat inputData lagras den på platsen som inputData råkar peka till. Du måste allocera plats för datan.
T.ex:
char inputData[100]; //eller calloc
...
scanf("%c", &inputData);
EDIT:
Stavar som en kratta
Varför sparar du om array?
array = input(array, inputData, rows, columns);
Då du arbetar med pekardatan behöver du inte spara om värdet. Men jag antar att det bara var i testkoden hit du gjorde det.
Du borde sätta const på array i funktionen för att förtydliga hur som helst.
char **input(char ** const array, char * inputData, int rows, int columns)