struct array mit NULL initialisieren



  • hi,

    möchte ein array aus structs initialisieren versuche es so

    typedef struct _node
    {
        char *key;
        int value;
        struct _node *next; 
    } node;
    /* Create a new hash table. */
    hash_table *create_hash_table()
    {
       int i = 0;
       /* speicher fuer den root und das nodes array
       * allokieren */
       hash_table *ht = (hash_table*) malloc(sizeof(hash_table));
       node *nodes = (node*) malloc(currentSize * sizeof(node));
    
       if (ht == NULL || nodes == NULL)
       {
          printf("Fehler bei Allokierung!");
          return NULL;
       }
    
       /* node array mit NULL initialisieren */
       for (i = 0; i <= currentSize; i++)
       {
          (*(nodes + i)) = 0;
       }
    
       ht->slot = &nodes;
    
       return ht;
    }
    

    nur bekomme den fehler error: incompatible types in assignment
    wieso?



  • liam23 schrieb:

    node *nodes = (node*) malloc(currentSize * sizeof(node));
    

    nimm statt 'malloc' einfach 'calloc' und dann brauchste die schleife nicht mehr 😉



  • oder memset



  • danke!

    int get_value(hash_table *ht, char *key)
    {
       node *it;
       node *n = *(ht->slot);
       int hashV = hash(key);
    
       if (hashV <= currentSize)
       {
          if (((n+hashV)) != NULL)
          {
             for (it = n+hashV; it != NULL; it = it->next)
             {
                if (strcmp(key, it->key) == 0)
                   return it->value;
             }
          }
       }
    
       return 0;
    }
    

    könntet ihr mir hier sagen warum ich bei strcmp immer ein speicherzugriffsfehler bekomme? slot ist ein **node pointer



  • Eventuell ist einer der Strings nicht nullterminiert (dann würde strcmp über das Ende hinaus weitervergleichen). Oder du hast noch gar nichts in it->key eingetragen (NULL zu dereferenzieren ist eine ganz schlechte Idee).


Anmelden zum Antworten