title: How can I free() after strdup?
body: <p>How can I <code>free()</code> from <code>strdup</code> when the call looked like this: <code>*(result + idx++) = strdup(token);</code>?</p>
  
  <p>More context:</p>
  
  <pre><code>char **str_split(char *a[], char *a_str, const char a_delim) {
      char **result = 0;
      size_t count = 0;
      char *tmp = a_str;
      char *last_comma = 0;
      char delim[2];
      delim[0] = a_delim;
      delim[1] = 0;
  
      /* Count how many elements will be extracted. */
      while (*tmp) {
          if (a_delim == *tmp) {
              count++;
              last_comma = tmp;
          }
          tmp++;
      }
  
      /* Add space for trailing token. */
      count += last_comma &lt; (a_str + strlen(a_str) - 1);
  
      /* Add space for terminating null string so caller
         knows where the list of returned strings ends. */
      count++;
  
      result = malloc(sizeof(char *) * count);
      if (result == NULL) {
          printf("Error allocating memory!\n"); //print an error message
          return result; //return with failure
      }
  
      if (result) {
          size_t idx = 0;
          char *token = strtok(a_str, delim);
  
          while (token) {
              assert(idx &lt; count);
              *(result + idx++) = strdup(token); /* memory leak! how to free() */
              token = strtok(0, delim);
          }
          assert(idx == count - 1);
          *(result + idx) = 0;
      }
  
      return result;
  }
  </code></pre>