【发布时间】:2019-11-10 14:19:51
【问题描述】:
对从双指针数组中删除单行有帮助吗?
例如,数组的每一行都包含一个名称字符串,例如'J' 'o' 'h' 'n' '\0'。从这个充满名字的数组中,我想从中删除一个名字。
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' '\0'。请记住,数组中有多个名称。
【问题讨论】:
-
从已释放的内存中访问数据是无效的(或者更好的是Undefined Behaviour)。你对这个结果很不走运(或幸运,取决于观点)。
-
你释放了
*p[0],这是错误的,你取消引用的次数太多了。free(p[0])是你想要的。
标签: c arrays double-pointer