从表中删除元素(c程序)
我有一个方法rtable_remove,如下所示
int rtable_remove(RESIZABLE_TABLE * table, char * name) { int i = 0; int j = 0; int position = 0; for(i = 0; i currentElements;i++) { if(strcmp(table->array[i].name, name) == 0) { position = i; free(&(table->array[i].name)); free(&(table->array[i].value)); for(j = position; j currentElements;j++) { table->array[j].name = table->array[j+1].name; table->array[j].value = table->array[j+1].value; } table->currentElements--; } } return 0; }
我想从表中删除一个条目,其名称作为方法中的参数传递。 例如,如果我有一个像 –
1)Mat 298 Vine Street
2)Jeff 998 Vine Street
3)Sun 234 Vine Street
然后我将参数Mat传递给rtable_remove方法,结果表应该是
1)Jeff 998 Vine Street
2)Sun 234 Vine Street
第二个元素成为第一个,第三个成为第二个,依此类推。 此外,我还想释放Mat占用的内存(表有两个字段名称和值,其中value是地址)。
我的代码的问题似乎是我试图释放内存的方式引发了一个损坏错误。 感谢您的帮助!
两件事情。 table-> array [i] .name和table-> array [i] .value是指针,因此不需要&
free(table->array[i].name); free(table->array[i].value);
第二。 循环应该直到j
for(j = position; j < table->currentElements - 1; j++)
如果arrays足够大,也许不需要第二部分。
你忘记了rest声明:
... table->currentElements--; break; //or return 0; ...
瓦尔特