Вам необходимо определить конструктор копирования для temp
. Прямо сейчас, то, что происходит, когда вы нажимаете a
в список, создается копия a
. Копия (назовите ее a2
) инициализируется, сказав a2.c = a.c
. Это означает, что и a
, и a2
указывают на один и тот же блок памяти. Когда вызываются их деструкторы, этот блок памяти освобождается дважды, что приводит к ошибке сегментации.
Учитывая то, что вы опубликовали, конструктор копирования, вероятно, должен выглядеть примерно так:
temp::temp (temp const &rhs)
{
this->a = rhs.a;
this->b = rhs.b;
this->c = (char *) malloc (10);
memcpy (this->c, rhs.c, 10);
}
Это предполагает, что то, на что указывает c
, всегда имеет длину 10 символов ...