Pointer auf Struktur mit ** Member



  • Hallo Leute ich habe ein problem mit der Übergabe einer Struktur, bzw. der derefferenzierung.

    Folgendes Bspl:

    typedef struct{
    	char** list;
    	int zeilen;
    	int laenge;
    	int status;
    }TEST;
    
    void foo1(TEST *ptr, int zeilen, int laenge){
    
    //wie spreche ich list richtig an??
    
    ptr->list=malloc(sizof(ptr->list)*zeilen);  //Falsch....  aber wie??
    
    //wäre es: 
    void foo1(char **test, int zeilen, int laenge){
    test=malloc(sizeof(*ptr)*zeilen;
    //fehlerüberprüfung
    for(x=0; x<zeilen; x++){
        ptr[x]=malloc(laenge);
    }
    

    stehe jetzt auf der Leitung


  • Mod

    Wie kommst du da drauf, dass Zeile 13 falsch wäre? Genau genommen muss es

    ptr->list=malloc(sizof(*ptr->list)*zeilen);
    

    heißen, sollte aber hier keinen Unterschied machen.

    Was ich als grundlegend falsch ansehen würde ist das Design mit einem Doppelzeiger, wenn du (der Funktionssignatur nach) anscheinend ein 2D-Array haben möchtest. Das ist eine unnötige Indirektion.



  • Kam darauf weil mein Programm sofort abgestürzt ist, und ich den Fehler dort vermutete. Der Fehler war aber ein anderer... peinlich:

    main.c

    TEST *ls1=NULL;   // da ist der Hund begraben  muss 
    //TEST *ls1;
    foo1(ls1, 5, 10);
    

    Was ich als grundlegend falsch ansehen würde ist das Design mit einem Doppelzeiger, wenn du (der Funktionssignatur nach) anscheinend ein 2D-Array haben möchtest. Das ist eine unnötige Indirektion.

    Gebe Dir vollkommen recht, aber das ganze fällt unter "Jugend Forscht" 🙂


Anmelden zum Antworten