我在哪里以及如何正确释放malloc指针?

时间:2019-12-13 01:58:06

标签: c pointers malloc free

我现在正在上C编程课程,并且正在制作类似于bash的shell。现在,我正在实施管道。因此,我需要strndup管道命令在解析时不修改原始管道命令。最后,我尝试free指向malloc的指针,但是我的程序无法正常工作。有人可以告诉我我做错了什么吗?下面是解析器的while循环的代码:

   while (pipeSeparatedCommand != NULL) {
        char *duplicateCmdForPiping = strndup(pipeSeparatedCommand, strlen(pipeSeparatedCommand)); // duplicates command
        pipeSeparatedCommand = strtok(NULL, "|"); // starts at the NULL Character that was tokenized
        char *token = strtok(duplicateCmdForPiping, " "); // finds the first space in the command, tokenizes the arguments by this space
        int index = 0;  // counts the number of commands and arguments

        while (token != NULL) {
            if ((input != NULL) || (output != NULL)) { // advances to the next argument if input or output is found (does not include them in args)
                token = strtok(NULL, " "); 
                continue;
            }

            commandArgsCount[index]++;
            commandArray[numberOfPipes][index] = token; // sets the argument index equal to the address of token (containing the token)
            token = strtok(NULL, " "); // token will search for the next delimiter from the last delimiter end spot
            index++;    
        }

        commandArray[numberOfPipes + 1][index] = NULL; // prevents the args array from collecting garbage in memory.

        if (pipeSeparatedCommand != NULL) // catches the zero case
            numberOfPipes++; // this begins at zero, increments if more pipes need to be added

        free(duplicateCmdForPiping);
        duplicateCmdForPiping = NULL;
    }

1 个答案:

答案 0 :(得分:0)

检查手册页中的servicePort。它说该函数将返回“指向字符串中每个后续标记的开头的指针”。我建议你换行

strtok()

    commandArray[numberOfPipes][index] = token;

请避免在C / C ++中使用驼峰式变量命名约定。这使您的代码极难阅读。