ok danke. was passiert dann bei folgendem Konstrukt:
char * globalpointer;
void test (void) {
char c = 'x';
globalpointer = &c;
}
Nehme ich richtig an, daß nachdem "test" beendet wurde ich mich nicht
mehr in anderen Funktionen darauf verlassen kann, daß ich nach
Dereferenzierung von globalpointer wieder mein 'x' erhalte? Denn
nachdem die Funktion beendet wurde müsste der Speicher ja wieder
freigegeben worden sein.
Konkret beschäftige ich mich nämlich derzeit mit FreeRTOS und da gibts
dieses Beispiel hier:
// Task to create a queue and post a value.
void vATask( void *pvParameters )
{
struct AMessage *pxMessage;
// Create a queue capable of containing 10 pointers to AMessage
structures.
// These should be passed by pointer as they contain a lot of
data.
xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
if( xQueue == 0 )
{
// Failed to create the queue.
}
// ...
// Send a pointer to a struct AMessage object. Don't block if
the
// queue is already full.
pxMessage = & xMessage;
xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
// ... Rest of task code.
}
Es wird eine Queue erstellt, die Pointer auf AMessage-structs
speichert. Aber was bringt mir das, wenn z.B. die Funktion in der die
Message erzeugt wurde zurückkehrt und damit quasi irgendwas an der
Stelle stehen kann, wo der Pointer der Message hinzeigt.