正确使用Malloc并使用c ++指针自由使用

时间:2013-05-13 18:51:18

标签: c++ pointers malloc free

很抱歉,如果这个问题出现在试图采取简单的方法,但我真的认为我只需要一些澄清。我正在尝试使用malloc和free。我以为我理解了它们,但我正在为它们做的任务本身有些令人困惑。

tklist数组中的每个元素都应该指向一个单独的标记(引号之间或空格分隔的字符集)。所以,我需要分配空间,然后释放它。

当内存应该被释放时,我不明白是。我试过在各种各样的地方释放它,没有任何作用。我想我只是没有完全理解某些东西,而且我已经查看了malloc并且在过去的几天里广泛地试图找出它。(也许我应该在我的主要内容中释放?也许我的strncpy是错误的?) 任何帮助将非常感激!

这是函数,它将一个字符数组和一个char指针数组作为参数,并返回第一个参数中找到的标记数。该函数应解析标记并将每个标记依次添加到tklist数组中。

int parseCommandLine(char cline[], char *tklist[]){
    int i;
    int length;
    int count = 0; //counts number of tokens
    int toklength = 0; //counts the length of each token
    length = strlen(cline);
    for (i=0; i < length; i++) {   //go to first character of each token

        if (((cline[i] != ' ' && cline[i-1]==' ') || i == 0)&& cline[i]!= '"') {



            while ((cline[i]!=' ')&& (cline[i] != '\0') && (cline[i] != '\r')){
                toklength++;
                i++;
            }
        count ++;
          //---------------
        //tklist[count] = (char *) malloc( toklength +1);
        //strncpy(tklist[count], &cline[i], toklength);
          //  free( (void *)tklist[count] );
         //--------------

            toklength = 0;
        }
        //--------------
        //free( (void *)tklist[count] );
        //--------------
        if (cline[i] == '"') {
            do {
                toklength++;
                i++;
                if (cline[i] == ' ') {
                    toklength--;
                }
            } while (cline[i]!='"');
            count++;
            //--------------
            //tklist[count] = (char *) malloc( toklength +1);
            //strncpy(tklist[count], &cline[i], toklength);
            //free( (void *)tklist[count] );
            //--------------
            toklength = 0;
        }
        //--------------
        //free( (void *)tklist[count] );
        //--------------
    }
    cout << count;
    return count;



}

1 个答案:

答案 0 :(得分:0)

完成使用后,您需要在来电方面释放tklist。