Im main() in Zeile 19 erstellst du einen char-Zeiger, der auf einen konstanten String zeigt. Es wird also automatisch vom Compiler Speicher reserviert, in diesen Speicher wird "Hallo Welt " reingeschrieben und dein char-Zeiger zeigt auf diese Konstante. Das ist aber wie schon erwähnt ein konstanter String -> du darfst ihn nicht ändern. Das machst du aber in der Funktion eraseAllBlanks().
Außerdem erstellst du in der Funktion ein char* temp. In Zeile 10 änderst du den Wert, auf den temp zeigt. Nur wohin zeigt temp? Irgendwohin -> Du änderst irgendeinen Speicher ab, ein weiterer Grund, warum das Programm abstürzt.
Du könntest die Sache mit einem Array in main() statt mit einem Zeiger lösen, oder du reservierst Speicher für den Zeiger mittels malloc() und beschreibst den reservierten Speicher mit "Hallo Welt ".
Dasselbe gilt in der Funtion: temp() muss unbedingt zuerst auf freien Speicher zeigen, sonst darfst du da nichts ändern.
Lg