1/ Auf p2 wird in TueEtwas() zugegriffen; der Inhalt wird für die
Addition abgefragt, d.h. irgendwo muss es auch einen existierenden
Inhalt geben.
2/ In Rufe_ein_Pointer() wird TueEtwas() aufgerufen, wobei an Stelle von
p2 zeiger gesetzt wird. Kombiniert mit 1/ heisst das, zeiger muss auf
einen existierenden Inhalt zeigen.
3/ In Rufe_ein_Pointer() wird zeiger definiert als int *zeiger und es
wird keine Zuweisung an zeiger gemacht. Der Compiler initialisiert
zeiger mit dem Wert NULL. Kombiniert mit 2/ heisst das, dass die
Bedingung "zeiger muss auf einen existierenden Inhalt zeigen", nicht
erfüllt ist.
Ändere
int *zeiger;
in
int *zeiger = &zahl; // initialisiere mit der Adresse der Variablen
zahl
dann läuft es formal. Ob das allerdings der Sinn des Programmfragments
ist, kann ich nicht entscheiden (letztlich würde so temp = *p+zahl
ausgeführt).
ADD: Sei froh, dass dein Compiler (oder Debugger/Runtime-Library) diesen
Fehler findet. Nullpointer-Zugriffe liegen mit an der Spitze der
Programmierfehler.