从C中的双指针数组中删除单行



从双指针数组中删除单行有帮助吗?例如,数组的每一行都保存一个名称字符串,例如'J' 'o' 'h' 'n' ''。从这个满是名字的数组中,我想从中删除一个名字。

char **p = malloc(arraySize*sizeof(char*));
for (i = 0;i < recordAmount;i++){
fnames[i] = malloc(c*sizeof(char));
}
/* to summarize I scan the user data into array after I allocate memory to it */
free(*p[0]);

在像上面的示例代码中那样使用free指示后,我发现我想要释放的内存没有被释放,如果我去打印数组的内容,它最终会打印最初在其中的数据,例如'J' 'o' 'h' 'n' ''。请记住,数组中有多个名称。

首先,这里:

free(*p[0]);

你取消引用的次数比你需要的多。你需要做的只是:

free(p[0]);

释放后,内存被释放,读取和写入内存是未定义的行为。如果你在释放后读取,任何事情都可能发生:

  • 你最终可能会读回你写的一模一样的东西
  • 你最终可能会阅读随机垃圾
  • 您可能会导致程序崩溃
  • 等等

释放后,通常无需执行更多操作。但是,如果要确保数据不能再被访问(以避免未定义的行为(,可以将该特定指针设置为NULL。这是一种非常常见的良好做法,用于避免在出现免费错误后使用。

free(p[0]);
p[0] = NULL;
char *x = p[0]; // Fine, just reads NULL.
puts(x);        // Segmentation fault, trying to dereference NULL.
// Memory corruption prevented.

最新更新