Почему в моей программе происходит ошибка в другом месте, когда я освобождаю выделенную память внутри функции? - PullRequest
1 голос
/ 01 апреля 2020

Мне трудно отладить некоторые странные проблемы с памятью. Как вы можете видеть в функции ниже, эта функция просто возвращает ноль или единицу. Поэтому мне нужно освободить выделенную память ('ps8linetmp').

ST_INT IsTypeMatch(ST_CHAR* ps8line)
{

    ST_CHAR* ps8substr;
    ST_CHAR* ps8type;
    ST_INT i = 0, s32daio = 0;
    ST_INT s32linenum;
    ST_CHAR* ps8linetmp;

    ps8linetmp = strdup(ps8line);
    ps8substr = strchr(ps8linetmp, ',');
    ps8substr = strchr(ps8substr, '=');
    ps8substr++;
    ps8type = strtok(ps8substr, ",");

    while(ps8substr != NULL)
    {
        if(i == 1)
            break;
        ps8substr = strtok(NULL, ",");
        i++;
    }
    s32daio = GetDigit(ps8substr);
    if(!strcmp(ps8type, "float"))
    {
        free(ps8linetmp);
        if(s32daio == 1 || s32daio == 2)
        {
            printf("Type of DI/DO can't be float\n");
            return 0;
        }
    }
    if(ps8linetmp != NULL)
        free(ps8linetmp);
    return 1;

}

Я почти уверен, что мне нужно освободить 'ps8linetmp', так как я использовал strdup для выделения памяти для него. Проблема в том, что когда я освобождаю память, у меня возникает ошибка. Место, где происходит segfault, даже не похоже на функцию. Я не понимаю, почему ошибка сегментации не возникает, когда я не освобождаю память, и почему ошибка функции не возникает внутри функции. Эта проблема мне недоступна, поэтому помощь любого гуру кода очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...