Zugriff auf Struktur



  • Der Rückgabewert wäre ja nicht die Struktur, sondern nur die Adressse bzw. der Zeiger.

    Übergieb den Zeiger doch als Referenz, dann kannst Du in der Funktion direkt drauf zugreifen und brauchst keine Rückgabe.



  • gosha16 schrieb:

    Und wenn ich ** übergebe stürzt das Programm bei realloc ab.

    du must nur genügend *, **, -> und & verwenden:

    void FunktionB(STRUKTUR** Struktur)
    {
      *Struktur = realloc(*Struktur, sizeof(**Struktur));
      (*Struktur)->a = 123;
    }
    
    void FunktionA()
    {
        static STRUKTUR* Struktur = NULL;
        FunktionB (&Struktur);
        printf("%i", Struktur->a); 
    }
    

    Elektronix schrieb:

    Übergieb den Zeiger doch als Referenz, dann kannst Du in der Funktion direkt drauf zugreifen und brauchst keine Rückgabe.

    das schrieb ich bereits
    🙂



  • fricky schrieb:

    Elektronix schrieb:

    Übergieb den Zeiger doch als Referenz, dann kannst Du in der Funktion direkt drauf zugreifen und brauchst keine Rückgabe.

    das schrieb ich bereits
    🙂

    Hab ich mißverstanden, ich dachte, das soll Zeiger auf Zeiger heißen.



  • Elektronix schrieb:

    ich dachte, das soll Zeiger auf Zeiger heißen.

    sollte es auch.
    🙂



  • Zeiger auf Zeiger ist aber keine Referenz, auch, wenn es im Ergebnis ähnlich funktioniert. 😉



  • Die Referenzen, die du meinst, gibt's aber in ANSI C nicht.



  • Mist 😮 , ich hab mich schon gefreut, daß ich auch mal mitreden kann. 😞
    Na schön, wieder was dazugelernt. 😃



  • Erstmal danke für die Antworten, ich denke wir sind auf der richtigen Spur. 🙂
    Also ich hab mal der übersicht wegen ein kleines Programm zum testen gebaut.

    #include <stdio.h>
    typedef struct
    {
    	int a;
    }STRUKTUR;
    
    void FunktionB(STRUKTUR** Struktur, int i) 
    {
        *Struktur = realloc(*Struktur, sizeof(**Struktur)*i);
        (*Struktur[i-1]).a = 123 + i; /*Beim zweiten Aufruf stürzt er warscheinlich hier ab*/
    } 
    
    void FunktionA(int i)
    { 
        static STRUKTUR* Struktur = NULL;
        FunktionB (&Struktur, i);
        printf("%i", Struktur[i-1].a);
    }
    
    int main(void)
    {
    	FunktionA(1); /*Funktioniert*/
    	FunktionA(2); /*Stürzt ab*/
    	FunktionA(3);
    	getchar();
    	return 0;
    }
    

    Nun leider funktioniert das nicht. Beim Zweiten aufruf stürzt er immer ab 😞

    //Edit, auserdem kommt noh folgende Warnung beim Kompilieren:
    1>.\main.c(9) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'STRUKTUR *' und 'int' unterschiedlich



  • gosha16 schrieb:

    Nun leider funktioniert das nicht. Beim Zweiten aufruf stürzt er immer ab 😞

    (*Struktur)[i-1].a, nicht (*Struktur[i-1]).a. [] geht vor *, das geht beim zweiten Aufruf in die Hose, weil es Struktur[1] nicht gibt.

    gosha16 schrieb:

    //Edit, auserdem kommt noh folgende Warnung beim Kompilieren:
    1>.\main.c(9) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'STRUKTUR *' und 'int' unterschiedlich

    #include <stdlib.h>



  • Ahhh, danke! Du bist mein Held des Tages! 😃


Anmelden zum Antworten