Я прочитал эту статью: Быстрый способ реализовать словарь в C и реализовал его. Нужно сказать, что я изменяю установку и поиск, чтобы использовать хештаб в качестве аргумента вместо глобальной переменной. Это работает как шарм:
struct nlist *install(struct nlist **hashtab,char *name, symbol *dfn);
struct nlist *lookup(struct nlist **hashtab, char *s);
Проблема в том, что мне нужно скопировать ха sh в новенький. Сначала я пытаюсь:
struct nlist **copy_context(struct nlist **hashtab){
nlist **copy = (nlist**)malloc(sizeof(nlist*)*HASHSIZE);
struct nlist *np;
int i = 0;
for (np = hashtab[i]; i<HASHSIZE ;i++ ){
debug_log("i vale %i",i);
if( np != NULL ){
install(copy,np->name,np->dfn);
}
}
return copy;
}
, но мне не ясно, где хранятся значения и где начать копирование. Я думал что-то вроде:
struct nlist **copy_context(struct nlist **hashtab){
nlist **copy = (nlist**)malloc(sizeof(nlist*)*HASHSIZE);
i = 0;//this is not correct
or (np = hashtab[i]; np != NULL; np = np->next){
install(copy,np->name,np->dfn);
}
return copy;
}
, но notingh работает.