Я пишу функцию для поиска переменных в строке с помощью регулярного выражения.Эта функциональность работает нормально, но когда я пытаюсь освободить временный символ *, содержащий строку, которую я оцениваю, glibc вызывает ошибку неверного указателя, и программа прерывается.В приведенном ниже коде, если цикл while никогда не вводится, сбой не происходит.
Что я делаю неправильно?
int parse_variables(size_t read_len)
{
regex_t comp_regex;
int start = 0;
char *command_copy = malloc(sizeof(command));
strcpy(command_copy, command);
if (regcomp(&comp_regex, "[$][^0-9_][A-Z0-9_]+", REG_EXTENDED) != 0)
{
pmesg(1, "Regex compilation failed. Not parsing for variables.\n");
return -1;
}
regmatch_t pmatch;
int var_match = regexec(&comp_regex, command_copy+start, comp_regex.re_nsub+1, &pmatch, 0);
pmesg(1, "The initial value of var_match is %i.\n", var_match);
while (var_match == 0) // We are finding instances matching the regex
{
int length = pmatch.rm_eo-pmatch.rm_so;
char* var_name = malloc(length*sizeof(char));
strncpy(var_name, command_copy + start + pmatch.rm_so, length);
pmesg(1, "The length is: %i - %i = %i.\n", pmatch.rm_eo, pmatch.rm_so, length);
pmesg(1, "The variable's name is: %s.\n", var_name);
free(var_name);
start += pmatch.rm_eo;
var_match = regexec(&comp_regex, command_copy+start, comp_regex.re_nsub+1, &pmatch, 0);
}
free(command_copy-start);
return 0;
}