从表中删除元素(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] .nametable-> array [i] .value是指针,因此不需要

 free(table->array[i].name); free(table->array[i].value); 

第二。 循环应该直到j currentElements – 1而不是j currentElements,因为你要设置j + 1元素:

 for(j = position; j < table->currentElements - 1; j++) 

如果arrays足够大,也许不需要第二部分。

你忘记了rest声明:

 ... table->currentElements--; break; //or return 0; ... 

瓦尔特