以下只是一段代码。我不知道它是否会编译,但它应该是我的问题的主旨。
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]?如果是这样,我将如何做到这一点?似乎我不能逐个元素地释放内存。