我写了一个运行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的命令功能吗?
答案 0 :(得分:3)
每次拨打strtok
时,您都会更改path
的值。这不起作用,因为free
需要原始指针。只需先保存path
的副本,然后将其用于strtok
或free
。