void cleanup( command_t* p_cmd ){
}
基本上我需要找到一种方法来释放C中已经malloc
的空间。我是c的新手并且正在使用基本shell。
答案 0 :(得分:2)
1)免费(p_cmd);
2)p_cmd = NULL;
E.g:
void cleanup( command_t* p_cmd )
{
if( p_cmd )
{
free (p_cmd);
p_cmd = NULL;
}
}
答案 1 :(得分:0)
这是天真的答案。它假定命令分配了一个malloc()
或strdup()
...
void cleanup(command_t *command) {
free(command);
}
作为一种风格问题,我会将您的函数称为free_command()
或destroy_command()
,并将其置于首先分配内存的函数附近。 E.g ...
typedef char command_t;
command_t *create_command_from_stdin(int line_length) {
command_t *command = malloc(line_length + 1);
fgets(command, line_length, stdin);
command[line_length] = '\0';
return command;
}
void free_command(command_t *command) {
free(command);
}
你不能没有麻烦地放两次。如果你没有释放malloc()
的内容,那么就会出现内存泄漏。为避免这种情况,您经常将创建和自由功能保持在相同的范围内,这样您就不会忘记它们......
void shell(void) {
while(true) {
command_t *command = create_command(80);
do_something_with_command(command);
do_insane_things_with_command(command);
free_command(command);
}
}
void do_something_with_command(const command_t *command) { ... }
void do_insane_things_with_command(const command_t *command) { ... }
const
标记将保护您免于意外地将它们释放到函数内部,并且还可以向其他人暗示这些函数不会获取命令的所有权。也就是说,他们不承担释放记忆的责任。
你的,马库斯