Pointer gibt nicht aus, wasser soll
-
hy.
ich bin noch sehr unerfahren in c / c++ und muss eine aufgabe bewältigen, in der ich einfach mal wieder keine ahnung mehr habe. ich denke es ist bestimmt nicht all zu schwierig, müßtet euch halt kurz reinlesen, wäre aber sehr dankbar

// nachricht.cpp #define _CRT_SECURE_NO_DEPRECATE #include <iostream> using namespace std; /* Ein Betriebssystem ist in der Lage, Nachrichten von einer Absender- zu einer Empfängertask zu übermitteln. Eine Nachricht besteht aus den Identifiern des Empfängers und des Absenders, beide vom Typ Taskid, dem Nachrichtencode (int), der Priorität (unsigned short) und einem Parameter vom Typ Any. Taskid besteht aus 4 Characters; damit beim Vergleichen von Identifiern keine Stringcomparefunktionen verwendet werden müssen, kann die Taskid auch als unsigned int interpretiert werden. Der Datentyp Any besteht aus dem Code des Datentyps (enumeration), gefolgt vom Datenwert; mögliche Typen sind Leer, Any *, Feld aus 4 chars, int oder float. Der Typ Any * erscheint auf den ersten Blick sinnlos, ermöglicht es aber, ein dynamisch erzeugtes Any-Feld zu übertragen; allerdings muss der Empfänger feststellen können, wie lang dieses Feld ist! Dazu hat das letzte Element den Typ Leer. a) Vereinbaren Sie die gesamte Datenstruktur in C++ schrittweise so, dass die Teiltypen Taskid und Any auch außerhalb der Nachricht bekannt sind. */ union Taskid { char id_char[4]; unsigned int id_int; }; enum TYPE { LEER, ANY_STERN, CHAR_4, INT, FLOAT }; struct Any { TYPE any_type; union { char any_char[4]; int any_int; float any_float; Any *p_any; }; }; struct Nachricht { Taskid sender; Taskid empfaenger; int ncode; unsigned short nprio; Any npara; }; /* b) Die Task "MP1" möchte der Task "DP1" die Nachricht 3 mit der Priorität 0 und den Parametern "sqrt", 2 und 1.4142 senden. Schreiben Sie eine Funktion, die eine Nachricht mit diesem Inhalt erzeugt. Hinweis zum Testprogramm: Eine Funktion analysiere(Nachricht nachricht) muss in der Lage sein, alle in der Nachricht enthaltenen Informationen auszulesen und darzustellen. */ Nachricht neue_Nachricht(void) { Nachricht neue_nachricht; Any any_liste[4]; any_liste[0].any_type = CHAR_4; strcpy(any_liste[0].any_char, "sqrt"); any_liste[1].any_type = INT; any_liste[1].any_int = 2; any_liste[2].any_type = FLOAT; any_liste[2].any_float = 1.4142; any_liste[3].any_type = LEER; strcpy(neue_nachricht.sender.id_char, "MP1"); strcpy(neue_nachricht.empfaenger.id_char, "DP1"); neue_nachricht.ncode = 3; neue_nachricht.nprio = 0; neue_nachricht.npara.any_type = ANY_STERN; neue_nachricht.npara.p_any = any_liste; // <--- LIEGT HIER DAS PROBLEM?! return(neue_nachricht); } void analysiere(Nachricht nachricht) { cout << "sender: " << nachricht.sender.id_char << endl; cout << "empfaenger: " << nachricht.empfaenger.id_char << endl; cout << "nachrichtencode: " << nachricht.ncode << endl; cout << "prioritaet: " << nachricht.nprio << endl; switch(nachricht.npara.any_type) { case INT: cout << "Integer: " << nachricht.npara.any_int << endl; break; case FLOAT: cout << "Float: " << nachricht.npara.any_float << endl; break; case CHAR_4: cout << "Char_4: " << nachricht.npara.any_char << endl; break; case ANY_STERN: cout << "LISTE: " << endl; cout << nachricht.npara.p_any << endl; /* do { switch(nachricht.npara. cout << nachricht.npara.p_any << endl; nachricht.npara.p_any++; } while(nachricht.npara.any_type == LEER); */ break; default: cout << "Nichts gefunden" << endl; break; } } int main(void) { Nachricht test_nachricht; test_nachricht = neue_Nachricht(); analysiere(test_nachricht); return 0; }Bei der Ausgabe trifft der Fall ANY_STERN zu, und sollte eigentlich den string "sqrt" ausgeben über den pointer nachricht.npara.p_any, allerdings spuckt er nur wirrwarr aus. der code ist so ablauffähig, also könnt ihn auch zu testzwecken mal kompilieren.
wäre euch rießig dankbar

-
1. der string "sqrt" hat fünf characters, nämlich 's', 'q', 'r', 't', '\0', aber das any_char array nur vier plätze.
2. die ausgabe des any_char arrays vom pointer p_any muss mit
cout << nachricht.npara.p_any->any_char << endl;erfolgen.