在内核空间C中,我是否需要在给它一个新值之前解除分配字符串内存?

时间:2015-11-02 16:09:30

标签: c arrays linux string kernel

以下只是一段代码。我不知道它是否会编译,但它应该是我的问题的主旨。

char **argv = NULL;
int argc = 0;
char *str = "Hello World";

argv = argv_split(GFP_KERNEL, str, &argc);

此时,我希望:

argv[0]返回“Hello”。

argv[1]返回“世界”。

但现在我想说“Hello StackOverflow”。

所以我尝试了类似的东西:

argv[1] = kstrdup("StackOverflow", GFP_KERNEL);

在我的代码中,argv将返回“Hello StackOverflow”。

但是我相信“世界”仍然存在于某个地方的记忆中,我不知道如何释放它。我尝试过这样的事情:

kfree(argv[1]);
argv[1] = kstrdup("StackOverflow", GFP_KERNEL);

但它最终给了我seg错误。我甚至尝试将dereference传递为kfree(& argv [argc - 1]),但它仍然给出了同样的问题。我注意到在argv_split的代码中,使用了kzalloc,所以我尝试了kzfree,但是没有用。但我也注意到它正在为整个阵列分配内存并将其归零。 argv_split返回一个指向字符串的指针数组。

所以我的问题是:在给它“StackOverflow”之前,我是否需要释放argv [1]?如果是这样,我将如何做到这一点?似乎我不能逐个元素地释放内存。

0 个答案:

没有答案