Zuweisung an dynamisches char Array



  • HIer noch ein bisschen bsp code

    #include <malloc.h>
    #include <stdlib.h>
    
    char **a = 0; //is nur zum demonstrien soll natürlich nicht global sein
    int elements = 0;
    void add_new_element(){
    if(a){
    	a = (char**)realloc(a,elements + 1);
    	a[elements++] = "sdfdsf";
    	//oda
    	a[elements++] = (char*)malloc(12321);
    	}
    a = (char**)malloc(1);
    a[0] = (char*) malloc(123);
    }
    

    geht sicher besser 😃
    also denk lieber selber nochmal nach
    mfg



  • @supertux
    die fehlermeldung bleibt allerdings trotzdem:
    "request for member `file' in something not a structure or union"



  • versuche als erstes

    typedef struct tsource_tmp { 
      char **file; 
      ... 
    }tSource;
    


  • fehler bleibt...



  • source[i] ist ein pointer auf tSource.

    source[i]->file = ...
    

    sollte keinen fehler produzieren

    K.



  • Danke, das funktioniert.

    nur, irgendwie verstehe ich das trotzdem nicht richtig, zwecks typedef -> struct -> char * oder char **

    Soweit ich nun gelesen und verstanden habe, so hoff ich, habe ich mal ein kleines snipplet geschrieben. So, nun habe ich dort einen pointer auf einen char mit noch keinem Wert. Diesen Verpacke ich nun in eine struct und weise mit typedef an, daraus einen neuen Datentyp zu machen. Also erstelle ich eine neue Variable z.b namens "n_array" und greife mit dieser dann auf die einzelnen Werte mit dem "-> operator" in der struct zu, richtig?

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct ar {
      char *array;
    }tsArray;
    
    int main(int argc, char **argv) {
      tsArray *n_array;
      n_array->array = argv[1];
      printf("Array content: %s\n", n_array->array);
      return 0;
    }
    

    Nur warum läßt sich das obige code snipplet nicht ausführen, sondern endet mit einem segmentation fault? Was habe ich da nicht richtig gemacht? Bitte um hilfe bei dem Problem. 😕



  • du musst mit

    n_array = (tsArray*)malloc(sizeof(tsArray));
    

    est mal speicher reservieren.
    K.



  • ok, aber warum funktioniert ohne struct und ohne typdef

    array = argv[1];

    diese Zuweisung? Warum brauch ich dort kein malloc?



  • Tipp: Kauf dir ein gutes c Buch. oder schau dir zumindest ein tut über pointer
    an

    mfg



  • in diesem fall weist du nur einem pointer (array ist ein pointer im stack )einen anderen pointer zu. du schreibst also auf eine variable die schon am stack reserviert ist.
    im vorigen fall dereferenzierst du einen uninitialisierten pointer der irgendwohin zeigt.
    K.



  • dank dir.


Anmelden zum Antworten