Morgen zusammen,
Oke dann fange ich mal mit der Listen Struktur an:
Code:
//LISTEN STRUKTUR ERSTELLEN
typedef struct LISTEN_TYP
{
void *mpv_DatenZeiger;
LISTEN_TYP *mpst_NaechsteListe;
} LISTE, *PLISTE;
//Ende Struktur
Oke, hier meine wesentlichen Prototypen:
Code:
//PROTOTYPEN
RESULT Speicher_fuer_Liste(LISTE **ppst_Liste);
RESULT Daten_in_Liste_einfuegen(LISTE **ppst_Liste, void *pv_DatenZeiger);
Jetzt in der Hauptfunktion Speicher bereitstellen für die Liste:
Code:
//HAUPTFUNKTION
RESULT main()
{
cout<<"IN DER MAIN FUNKTION:\n\n";
//Deklarierung unseres Listen Zeigers
LISTE *pst_Liste = NULL;
//Wir holen uns einen gültigen Speicher auf dem Heap
//für unsrer Liste
if(Speicher_fuer_Liste(&pst_Liste) != OK)
{
cout<<"FEHLER BEI SPEICHERBEREITSTELLUNG\n\n";
}
cout<<"ZURUECK IN DER MAIN FUNKTION:\n";
cout<<"EIGENE ADRESSE VON &pst_Liste:\t\t\t\t"<<&pst_Liste<<"\n";
cout<<"GESPEICHERTE ADRESSE JETZT AUF HEAP von pst_Liste:\t"<<pst_Liste<<"\n";
cout<<"ADRESSIERUNG von mpv_DatenZeiger:\t\t\t"<<pst_Liste->mpv_DatenZeiger<<"\n";
cout<<"ADRESSIERUNG von mpst_NaechsteListe:\t\t\t"<<pst_Liste->mpst_NaechsteListe<<"\n\n";
Jetzt in der Funktion für Speicher bereitstellen:
Code:
//Funktion um Speicher für unsrer Liste bereitzustellen
RESULT Speicher_fuer_Liste(LISTE **ppst_Liste)
{
cout<<"IN DER FUNKTION SPEICHER BEREITSTELLEN:\n";
//Versuch Speicher auf dem Heap bereitzustellen
*ppst_Liste = (LISTE*) malloc(sizeof(LISTE));
//Prüfen ob wir einen gültigen Speicher haben
if(*ppst_Liste == NULL)
{
return SPEICHER_FEHLER;
}
//Wir setzen unsere Zeiger innerhalb der Struktur auf NULL
(**ppst_Liste).mpv_DatenZeiger = NULL;
(*ppst_Liste)->mpst_NaechsteListe = NULL;
cout<<"EIGENE SPEICHERADRESSE von &ppst_Liste\t\t\t"<<&ppst_Liste<<"\n";
cout<<"GESPEICHERTE ADRESSE von ppst_Liste\t\t\t"<<ppst_Liste<<"\n";
return OK;
}
Oke, nach meiner Ausgabe habe ich jetzt folgende Adressierungen:
Eigene Adresse von Normalen Listen Zeiger: 0012FF7C (Stack Adressierung)
Eigene Adresse von Doppel Listen Zeiger: 0012FF2C (Stack Adressierung)
Gespeicherte Adresse von Doppel Listen Zeiger: 0012FF7C (Stack Adresse des Normalen Zeigers)
Gespeicherte Adresse von Normalen Zeiger: 01110030 (Heap Adressierung)
Alles klar, jetzt zu meinen HAUPTPROBLEM die Daten einfügen:
In der Hauptfunktion sieht das folgendermaßen aus:
Code:
//Wir fügen Daten in unsere Liste ein
if(Daten_in_Liste_einfuegen(&pst_Liste,(void*)'A' ) != OK)
{
cout<<"FEHLER BEIM DATEN EINFUEGEN IN LISTE!\n";
return OK;
}
cout<<"ZURUECK IN DER MAIN FUNKTION:\n";
cout<<"EIGENE ADRESSE VON &pst_Liste:\t\t\t\t"<<&pst_Liste<<"\n";
cout<<"GESPEICHERTE ADRESSE JETZT AUF HEAP von pst_Liste:\t"<<pst_Liste<<"\n";
cout<<"WERT von mpv_DatenZeiger:\t\t\t\t"<<(char)pst_Liste->mpv_DatenZeiger<<"\n";
cout<<"ADRESSIERUNG von mpv_DatenZeiger:\t\t\t"<<pst_Liste->mpv_DatenZeiger<<"\n";
cout<<"ADRESSIERUNG von mpst_NaechsteListe:\t\t\t"<<pst_Liste->mpst_NaechsteListe<<"\n\n";
//Wir fügen ein zweitesmal Daten in die Liste
if(Daten_in_Liste_einfuegen(&pst_Liste,(void*)'B') != OK)
{
cout<<"FEHLER BEIM DATEN EINFUEGEN IN LISTE!\n";
return OK;
}
cout<<"ZURUECK IN DER MAIN FUNKTION:\n";
cout<<"EIGENE ADRESSE VON &pst_Liste:\t\t\t\t"<<&pst_Liste<<"\n";
cout<<"GESPEICHERTE ADRESSE JETZT AUF HEAP von pst_Liste:\t"<<pst_Liste<<"\n";
cout<<"WERT von mpv_DatenZeiger:\t\t\t\t"<<(char)pst_Liste->mpv_DatenZeiger<<"\n";
cout<<"ADRESSIERUNG von mpv_DatenZeiger:\t\t\t"<<pst_Liste->mpv_DatenZeiger<<"\n";
cout<<"ADRESSIERUNG von mpst_NaechsteListe:\t\t\t"<<pst_Liste->mpst_NaechsteListe<<"\n\n";
usw.. Somit füge ich dann Listen Element für Element ein.Die Funktion für Daten einfügen lasse ich mal weg.
Oke, nach dem Einfügen habe ich jetzt folgende Adressierungen und Werte:
IM ERSTEN FALL: LISTE LEER.
Eigene Adresse von Normalen Listen Zeiger: 0012FF7C (Stack Adressierung)
Gespeicherte Adresse von Normalen Listen Zeiger: 01110030 (Heap Adressierung)
Gespeicherte Adresse von mpv_DatenZeiger: 0000 0041 (Hexadezimaler Wert)
Wert von mpv_DatenZeiger: A (nach casting in Datentyp char)
Gespeicherte Adresse von mpst_NaechsteListe: 0000 0000
IM ZWEITEN FALL: LISTE HAT BEREITS DATEN.
Eigene Adresse von Normalen Listen Zeiger: 0012FF7C (Stack Adressierung)
Gespeicherte Adresse von Normalen Listen Zeiger: 01110100 (neue Heap Adressierung für Listen Element)
Gespeicherte Adresse von mpv_DatenZeiger: 0000 0042 (Hexadezimaler Wert)
Wert von mpv_DatenZeiger: B (nach casting in Datentyp char)
Gespeicherte Adresse von mpst_NaechsteListe: 01110030 (zeigt auf die vorher erstellte Listen Adressierung im Heap)
Sorry das ganze ist etwas lang geraten, aber ich wußte nicht genau wo ich hätte anfangen sollen, und hoffe das es übersichtlich genug ist, das man mir helfen kann.
Danke an Matthias und Endurion das ihr euch die Zeit nehmt oder bis jetzt auch genommen habt.
mfg Bonsai333
