Announcement

Collapse
No announcement yet.

in array of structs speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • in array of structs speichern

    Hallo Leute,

    ich habe folgendes Problem:

    Ich möchte in ein Array of Structs ein Zeichen Speicher.
    Allerdings bekomme ich beim hineinschieben eine "Speicherzugriffsfehler".
    Hier mein Code:

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    //#include <assert.h>
    //#include <stdbool.h>
    //#include <limits.h>
    //#include <inttypes.h>
    
    #define UCHAR_MAX 255
    
    typedef struct _CodeTag_
    {
      unsigned char symbol_;//Encoded symbol_, e.g. 'a'.
      int nr_bits_;//Nr of necessary bits for the encoded symbol_.
      char *bits_;
    } CodeTag;
    
    typedef CodeTag* CodeTable[UCHAR_MAX + 1];//The CodeBook
    
    void initCodeBook(CodeTable code_book)
    {
      int i;
      for (i = 0; i <= UCHAR_MAX; ++i)
        code_book[i] = NULL;
    }
    
    
    int main(int argc, char* argv[])
    {
    char test = 'a';
    CodeTable codebook;
    
    initCodeBook(codebook);
    
    codebook[0]->symbol_ = test;
    printf("TEST\n");
    printf("%c\n", codebook[0]->symbol_);
    
      return 0;
    }
    Danke für die Hilfe im Vorhinein.

    Lg

  • #2
    unsigned char symbol hat keine Größe, wird nie Speicherplatz zugewiesen
    Christian

    Comment


    • #3
      Code:
      char test = 'a';
      unsigned char test2;
      CodeTable codebook;
      
      test2 = test;
      printf("%c\n", test2);
      hier gebe ich dem unsigned char ja auch keine Größe, es wird ja einfach 1 Byte reserviert oder?

      Lg

      Comment


      • #4
        Dort erfolgt die Reservierung durch die Zuweisung. Und test2 hat keinen eigenen Speicher und verweist auf test
        Christian

        Comment


        • #5
          Ok!
          Wie löse ich das am Besten, wenn ich im Struct nichts ändern möchte?

          Lg

          Comment


          • #6
            gar nicht.
            Christian

            Comment


            • #7
              Und sonst?

              Comment


              • #8
                unsigned char *symbol_
                unsigned char symbol_[1]
                Christian

                Comment


                • #9
                  Dein Problem liegt in der FUnktion initCodeBook.
                  Du hast einen Vektor von Pointern auf eine Struktur "CodeTag";
                  Um nun mittels der Pointer auf die Struktur zugreigen zu koennen, musst du entsprechen Speicher reservieren.
                  Code:
                    for (i = 0; i <= UCHAR_MAX; ++i)
                      code_book[i] = (CodeTag*)malloc (sizeof(CodeTag));
                  Und nicht vergessen diesen Speicher wieder freigeben.
                  Code:
                   for (i = 0; i <= UCHAR_MAX; ++i)
                      free (code_book[i]);

                  Comment


                  • #10
                    Danke!!!

                    Comment

                    Working...
                    X