Мне трудно отладить некоторые странные проблемы с памятью. Как вы можете видеть в функции ниже, эта функция просто возвращает ноль или единицу. Поэтому мне нужно освободить выделенную память ('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, даже не похоже на функцию. Я не понимаю, почему ошибка сегментации не возникает, когда я не освобождаю память, и почему ошибка функции не возникает внутри функции. Эта проблема мне недоступна, поэтому помощь любого гуру кода очень ценится!