Új hozzászólás Aktív témák

  • tototos

    addikt

    Sziaszto!

    Egy érdekes problémával állok szembe. C-ben szeretnék stringeket darabolni. Ez egyenlőre nem tűnik nagy feladatnak, van egy függvényem ami szépen darabolja a dolgokat. A gond ott kezdődik, hogy amikor fel akarok szabadítani a feldarabolt részeknek allokált területet akkor egyszer a free függvény váratlan hibát generál és a mikrovezérlőm elmegy egy végtelen ciklusba.

    EZ lenne a daraboló függvény:

    char** str_split(char* a_str, const char* a_delim)
    {
    char** result = 0;
    size_t count = 0;
    char* tmp = a_str;
    char* last_comma = 0;
    size_t index;

    /* Count how many elements will be extracted. */
    while (*tmp)
    {
    for (index = 0; index < strlen(a_delim); ++index)
    {
    if (*(a_delim+index) == *tmp)
    {
    count++;
    last_comma = tmp;
    }
    }
    tmp++;
    }


    /* Add space for trailing token. */
    count += last_comma < (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)
    {
    size_t idx = 0;
    char* token = strtok(a_str, a_delim);

    while (token)
    {
    assert(idx < count);
    *(result + idx++) = strdup(token);
    token = strtok(0, a_delim);
    }
    //assert(idx == count - 1);
    *(result + idx) = 0;
    }

    return result;
    }

    Ez pedig egy része a kódnak:

    tokens = str_split(line, ",;");
    if (tokens)
    {
    LINScheduleTable[frameIndex].Frame.SignalIDs_lda16[signalIndex] = atoi(*tokens);
    LINScheduleTable[frameIndex].Frame.SignalOffsets_lda8[signalIndex] = atoi(*(tokens+1));
    for (i = 0; *(tokens + i); i++)
    {
    free(*(tokens + i));
    }

    free(tokens);
    }

    Az érdekesség, hogy ez a részlet meghívódik kb 25-ször, és 26. lépésnél száll el.
    Láttok valami hatalmas hibát a kódban?

    Köszi

Új hozzászólás Aktív témák

Hirdetés