Я не могу понять, насколько я ошибаюсь.Адрес Valgrind находится в стеке Thread's
T* tokenizer = create(argv[1], argv[2]);
destroy(tokenizer);
Вот структура:
struct T_
{
char *sep_set;
char *str;
char *token;
int *last_index;
};
typedef struct T_ T;
Вот функция создания:
T *create(char *separators, char *ts)
{
T *tk = malloc(sizeof(struct T_));
tk->sep_set = malloc(sizeof(char)*strlen(separators));
tk->str = malloc(sizeof(char)*strlen(ts));
tk->last_index = malloc(sizeof(int));
tk->sep_set = separators;
tk->str = ts;
*tk->last_index = 0;
return tk;
}
void destroy(T *tk)
{
free(tk->sep_set);
free(tk->str);
free(tk->last_index);
free(tk);
}
Моя ошибка:
==12302== Invalid free()/delete/delete[]/realloc()
==12302== at 0x4C273F0: free (vg_replace_malloc.c:446)
==12302== by 0x400649: destroy (t.c:58)
==12302== by 0x40088C: main (t.c:145)
==12302== Address 0x7ff0006e7 is on thread 1's stack
==12302==
==12302== Invalid free()/delete/delete[]/realloc()
==12302== at 0x4C273F0: free (vg_replace_malloc.c:446)
==12302== by 0x400659: destroy (t.c:59)
==12302== by 0x40088C: main (t.c:145)
==12302== Address 0x7ff0006ec is on thread 1's stack
Линии 58 и 59 являются
free(tk->sep_set);
free(tk->str);
Любая помощь будет высоко оценена!
спасибо. И ты прав! Начиная работать со строками после ДЛИННОГО перерыва. Полностью забыл про strdup. Еще раз спасибо! – user2266603