数组指针始终指向NULL

时间:2019-02-18 02:22:14

标签: c

我正在尝试在节点数组中创建链接列表。当我尝试将arrTab-> h_table [index]的指针更新为newNode的地址时,该地址指向newNodes的地址。但是,当我尝试添加到数组中存在的列表时,指针始终指向NULL,而不是内存中的先前值。基本上,链表的arrTab-> h_table [index]头不会更新为newNode的地址。

Fleet f;
f.update<TouchScreen>(4, a1);
f.update<Blah>(10, c1); 

1 个答案:

答案 0 :(得分:4)

我不能确定为什么指针总是指向NULL ;没有足够的代码。考虑发布MCVE

但是发布的代码几乎没有解决的问题。

首先,它像没有明天一样泄漏内存:

symbol_t *symbol = (symbol_t*) calloc(1, sizeof(symbol_t));

分配一些内存,然后

newNode->symbol = *symbol;

将该内存的内容复制到新位置。分配的内存仍然存在,并且在函数返回后仍将继续存在-但是无法获取它。我强烈建议分配symbol,并直接与newNode->symbol合作:

newNode->symbol.name = strdup(name);
newNode->symbol.addr = addr;

hash的{​​{1}}和index参数似乎被计划为out参数。在这种情况下,请注意symbol_searchhash = &hashVal;的结果对于调用者是不可见的。您可能是指index = &indexVal;*hash = hashVal

最大的问题来自*index = indexVal

sym_table_t *symCopy = symTab;是一个指针。它指向一个实际的符号表,这是一个很大的内存。分配后,symTab指向相同的内存。表示

symCopy

修改那段内存。搜索完成后,symCopy->hash_table[*index] = symCopy->hash_table[*index]->next; 与搜索前不同。这可能是您问题的根源。无论如何,请考虑

hash_table[index]

并改用此光标。

请注意,搜索条件node_t * cursor = symTab->hash_table[*index]; 很奇怪。给定链表中的每个节点都具有相同的哈希(请检查添加方式)。即使名称不同,第一个节点也会产生一个匹配项。