我可以/我应该释放strtok返回的指针

Jav*_*ant 1 c string free pointers memory-management

所以我动态创建一个字符串数组.然后我通过调用strtok为该数组中的每个元素分配一个返回的指针.在我的过程结束时,我需要重做一切,我一直试图释放所述数组元素中的指针,但我不断收到错误说明

*** glibc detected *** ./prgm: munmap_chunk(): invalid pointer: 0x00007fff600d98

另外,在循环结束时释放inputStr是否有意义?

我的逻辑"根本不合逻辑"在哪里思考错误...例如代码

   char** argvNew = (char**)calloc(33,sizeof(char*));
   char inputStr[128];  
   do{    
        scanf("%127[^\n]%*c", inputStr);
        token = strtok(inputStr, delim);

        /* Add tokens to array*/
        varNum= 0;
        for(i = 0; token != NULL; i++){
            varNum++;
            argvNew[i] = token;
            token = strtok(NULL, delim);
        }
        argvNew[i] = NULL;

       //Free argvNew 
        for(i = 0; i < varNum;i++){
            printf("Deleting %i, %s\n",i,argvNew[i]);
            free(argvNew[i]);
        }
  while(1);
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 6

不,你不应该释放它.它返回一个指向字符的指针inputStr(或NULL当它到达结尾时).它没有分配任何新的内存,所以没有什么可以免费的.

如果inputStr动态分配,则应在完成后释放它.