基本上我试图在数组的帮助下实现一个表。数组功能已经给出,不应该更改。我配置有问题的是我的table_remove函数。请记住,我并没有尽力做到最有效的方法。
我尝试做的是遍历整个表格以查找是否有匹配的密钥。
如果找到钥匙,请保存位置。 如果不退出。
所以在找到位置后,我将其设置为释放键和&该位置的价值,希望它能够“消除”这个位置。关键&该位置的价值对。但是,我给定的测试程序返回"从表中删除最后一个元素不会导致空表。"。如果我在最后添加" array_setVal(array,NULL,index),那么整个程序崩溃(可能是因为它试图在测试中进一步写入该空位)。
所以现在我想知道我是否以错误的方式接近这个问题并且必须做进一步的操作以实际从位置移除值而不会弄乱位置本身,所以下次我使用table_insert,该位置将为空并且另一个键和&值对将插入该位置。
int saveRemovedIndex = -1;
/* Check if the key already exists */
for(int indexCounter = 0; indexCounter <= MAXINDEX; indexCounter++){
i = array_inspectValue(t->values, indexCounter);
if (t->cf(i->key,key)==0) {
saveRemovedIndex = indexCounter;
break;
}
}
/* Checks if the key actually exists in the table.
* If it exists, remove it. Else quit.*/
if (saveRemovedIndex != -1) {
i = array_inspectValue(t->values, saveRemovedIndex);
if(t->keyFree!=NULL) {
t->keyFree(i->key);
}
if(t->valueFree!=NULL) {
t->valueFree(i->value);
}
} else {
return;
}