Richtig
In c darf man strings nicht durch = zuweisen sondern immer durch irgendwelche string-Functionen ( Ausnahme ist direkt bei der Declaration, siehe unten ). Bei einzelnen Zeichen geht das aber, da muss man dann nur darauf achten am Schluss eine 0 zu setzen. z.B.
instructions[0][0] = 'W';
instructions[0][1] = 0;
und schon gibs bei der Ausgabe nen W.
Ansonsten ist dein Beispiel aber ziemlich unsinnig, denke aber mal es ist nur ein Beispiel für das Problem als solches.
Ein einfaches
char instructions[] = {"Welcome ..."};
hätte den selben Effekt und du brauchst kein free().
Genau betrachtet gibt es gar keine strings, sondern nur char-Arrays