被释放的指针没有被分配!无法解决

时间:2016-03-08 05:19:19

标签: c pointers free

我写了一个运行linux命令的函数(仍在修改)。

为什么最后的免费(路径)会出错?

这是代码:

void cmd_other(char *cmd){
  char *env;
  env = getenv("PATH");
  char * path = malloc(424);
  path = strtok(env, ":");
  int notExist = 1;

  while(path != NULL){              //this will break all $PATH variables by":"
    char *file = malloc(424);
    strcat(file, path);
    strcat(file,"/");
    strcat(file, cmd);
    printf("%s\n", path);
    if(access(file, X_OK) == 0){
      pid_t child_pid;
      pid_t pid = fork();
      int child_status = 0;
      if(pid == 0){                    //since execvp() will end the process
        char *args[] = {file, (char *) NULL};
        execvp(file,args);
        exit(0);
      }
      else{
        child_pid = wait(&child_status);
        notExist = 0;
        break;
      }
    }   
    path  = strtok(NULL, ":");
    free(file);
  }
  if(notExist){           // if the command not exist in $PATH
    printf("%s: command not found\n", cmd);
  }
  free(path);
}
对象0x7fff5fbffe21的

malloc:***错误:未分配的指针被释放

我正在编写linux的命令功能吗?

1 个答案:

答案 0 :(得分:3)

每次拨打strtok时,您都会更改path的值。这不起作用,因为free需要原始指针。只需先保存path的副本,然后将其用于strtokfree