Und was genau geschieht beim Aufruf von receive_telex? Dem übergibst
Du einen Pointer. Und diesen Pointer überschreibst Du mit dem Ergebnis
von hole_daten.
Pointer werden als Kopie ihrer selbst an Funktionen übergeben, so, wie
es bei anderen Datentypen (int etc.) auch geschieht.
Während der Laufzeit der Funktion befindet sich diese Kopie auf dem
Stack, eine Änderung bewirkt nach Beendigung der Funktion nichts.
Um das zu erzielen, was Du eigentlich vorhast, musst Du receive_telex
einen Pointer auf einen Pointer übergeben, und das Ergebnis von
hole_daten dem dereferenzierten Pointer übergeben:
1 | void test(void)
|
2 | {
|
3 | unsigned char *P_telex;
|
4 |
|
5 | status = receivetelex(&P_telex);
|
6 | }
|
7 |
|
8 | int receivetelex(unsigned char **telex_in)
|
9 | {
|
10 | *telex_in = hole_daten();//hole pointer auf Daten.
|
11 |
|
12 | return(INCOMING_TELEGRAMM);//Telegramm erhalten
|
13 | }
|
Zu klären wäre noch, wie in hole_daten der Rückgabewert bestimmt wird;
das darf nicht die Adresse eines lokalen (auf dem Stack angelegten)
Arrays sein.