keine ausabe aus struct :-(



  • hallo, ich versuche meine daten aus einem struct zu bekommen, leider ohne erfolg 😞

    typedef struct na2
    {
      char*  name;
      int    anz;
    } na2element
    
    im main:
    
    na2element einname[1024];
    
    initialisierung:
    
      for (i = 0; i < 1024; i++)
      {
        einname[i].name = NULL;
        einname[i].anz = 0;
      }
    
    in einer while schleife gebe ich datein in das struct:
    
      while (bedingung)
      {
        // daten werden umstĂ€ndlicher gefĂŒllt, deshalb hier nur ein Beispiel. aber auch dieses funktioniert nicht
    
        einname[i].name = "test";
        einname[i].anz++;
    i++
    
    // wenn ich hier ein cout mache, bekomm ich ein Ergebniss:
        printf("%5i  %s\n",anz, name);
      }
    
    // wenn ich hier ein cout mache, bekomm ich KEIN Ergebniss:
    
    for(i=0;i<=1024;i++){
        printf("%5i  %s\n",einname[i].anz, einname[i].name);
    }
    

    wo liegt mein Problem??



  • In dieser Zeile: einname[i].name = "test";
    weist du dem Pointer einen Verweis auf einen temporĂ€ren String zu. Wenn du den GĂŒltigkeitsbereich verlĂ€ĂŸt, ist das Verhalten undefiniert bzw. GlĂŒck etc. Also entweder fĂŒr name Speicher reservieren (zB mit new) oder gleich std::string benutzen.



  • lege ich in dieser Zeile nicht ein struct mit 1024 Feldern an UND sie bekommen automatisch speicher zugewiesen?

    na2element einname[1024];

    oder ungefÀhr so?

    na2element einname[1024]= (na2element) malloc(1024*(sizeof(na2element)));



  • Poste das doch ins C Forum. C++ ist das nĂ€mlich nicht.



  • _mache_fehler schrieb:

    hallo, ich versuche meine daten aus einem struct zu bekommen, leider ohne erfolg :-(...

    Wie wĂ€re es wenn du einfach auf std::string umsteigst und nicht den armen PC mit schreiben in nichtallozierte Speicherbereiche quĂ€lst 😉 Aber ich glaube nicht das du ĂŒberhaupt ins richtige Forum gepostet hast da kein Teil deines Codes auf C++ deutet.

    char* name; <-- Zeiger
    name = "test"; <-- Vereinfacht gesprochen: Dein Zeiger mag nun wohin Zeigen, aber der Speicher wurde dafĂŒr nicht alloziert.

    Das der erste printf noch ein Ergebnis ausgibt ist eher GlĂŒck...

    cu André



  • _mache_fehler schrieb:

    lege ich in dieser Zeile nicht ein struct mit 1024 Feldern an UND sie bekommen automatisch speicher zugewiesen?

    na2element einname[1024];
    ...

    Dein na2element ist im Speicher vorhanden, auch der Zeiger "name", nicht aber ein Speicherbereich hinter dem Zeiger.

    cu André



  • Mach aus dem:

    _mache_fehler schrieb:

    ...

    typedef struct na2
    {
      char*  name;
      int    anz;
    } na2element
    ...
    

    das hier:

    #include <string>
    
    struct na2element
    {
      std::string  name;
      int    anz;
       na2element() : name(), anz(0) {}
    };
    

    und streiche diesen Abschnitt

    ...
      for (i = 0; i < 1024; i++)
      {
        einname[i].name = NULL;
        einname[i].anz = 0;
      }
    ...
    

    Wenn du dann noch die printf() durch passenden std::cout-Konstrukte ersetzt, nĂ€herst du dich langsam der Programmiersprache, um die es in diesem Forums geht und das Teil könnte laufen 😉

    Gruß,

    Simon2.


Log in to reply