I'm working on creating a hash table implementation for an assignment. I've defined my hashtable as struct as follows:
typedef struct hashtable { int size; int entries; int table*; // pointer to table. Each entry will point to linked list // of key-value nodes } hashtable; I have to initialize the hashtable struct in a method using double pointers, e.g.:
void init(hashtable** ht) { ... } I've written a basic implementation below:
#include <stdio.h> #include <stdlib.h> typedef struct hashtable { int size; int entries; int table*; // pointer to table. Each entry will point to linked list // of key-value nodes } hashtable; void init(hashtable**); void init(hashtable** ht) { *ht = (hashtable *) malloc( sizeof(hashtable) ); *ht->size = 3; } int main(){ hashtable *t = NULL; init(&t); printf("t.size: %i", t->size); } However, I keep getting the following compile error:
ll.c:19:8: error: member reference base type 'hashtable *' (aka 'struct hashtable *') is not a structure or union *ht->size = 3; ~~^ ~~~~ 1 error generated. So I'm confused by the following: 1. I'm not sure how to create a new struct in the init function when being passed a pointer to pointer. 2. After allocating the struct, how do I modify the struct member attributes?
*ht->size = 3;-->(*ht)->size = 3;int table*;???