How can I free() after strdup?
<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>