可用于名称和argv字段的malloc的可用内存

时间:2015-02-11 20:40:55

标签: c

void cleanup( command_t* p_cmd ){
}

基本上我需要找到一种方法来释放C中已经malloc的空间。我是c的新手并且正在使用基本shell。

2 个答案:

答案 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标记将保护您免于意外地将它们释放到函数内部,并且还可以向其他人暗示这些函数不会获取命令的所有权。也就是说,他们不承担释放记忆的责任。

你的,马库斯