从 C 中的双指针数组中删除一行?
Deleting a single row from a double pointer array in C?
对于从双指针数组中删除单行有什么帮助吗?
例如,数组的每一行都包含一个名称字符串,例如 'J' 'o' 'h' 'n' '[=11=]'
。我想从这个充满名字的数组中删除一个名字。
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 指示后,我发现我想释放的内存没有被释放,如果我去打印数组的内容,它结束up 打印最初在那里的数据,例如 'J' 'o' 'h' 'n' '[=11=]'
。请记住,数组中有多个名称。
首先在这里:
free(*p[0]);
您取消引用的次数超出了您的需要。释放第一行需要做的只是:
free(p[0]);
freeing后,内存被释放,对其进行读写是未定义的行为。如果你在释放后阅读,任何事情都可能发生:
- 你最终可以读回你写的完全相同的东西。
- 你可能会读到乱七八糟的垃圾。
- 您可能会导致程序崩溃。
- 等等...
释放后,一般不需要做太多。但是,如果你想确保数据不能再被访问(以避免未定义的行为),你可以将该特定指针设置为 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.
对于从双指针数组中删除单行有什么帮助吗?
例如,数组的每一行都包含一个名称字符串,例如 'J' 'o' 'h' 'n' '[=11=]'
。我想从这个充满名字的数组中删除一个名字。
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 指示后,我发现我想释放的内存没有被释放,如果我去打印数组的内容,它结束up 打印最初在那里的数据,例如 'J' 'o' 'h' 'n' '[=11=]'
。请记住,数组中有多个名称。
首先在这里:
free(*p[0]);
您取消引用的次数超出了您的需要。释放第一行需要做的只是:
free(p[0]);
freeing后,内存被释放,对其进行读写是未定义的行为。如果你在释放后阅读,任何事情都可能发生:
- 你最终可以读回你写的完全相同的东西。
- 你可能会读到乱七八糟的垃圾。
- 您可能会导致程序崩溃。
- 等等...
释放后,一般不需要做太多。但是,如果你想确保数据不能再被访问(以避免未定义的行为),你可以将该特定指针设置为 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.