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

我现在正在上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;
    }
libenlai04261 回答:我在哪里以及如何正确释放malloc指针?

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

strtok()

    commandArray[numberOfPipes][index] = token;

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

本文链接:https://www.f2er.com/2929997.html

大家都在问