Вы инициализируете p
в NULL
в конструкторе, затем пытаетесь разыменовать его в add
(через q
):
r = q = p;
// the while loop will not be executed as p == NULL
q->lp = new node;
Сначала необходимо инициализировать p
- либово время конструирования (в этом случае ваш «пустой» список не будет физически пустым, поэтому вы должны иметь дело именно с этим, например, при переборе / удалении элементов), или вы должны проверить add
для случая, когда p == null
иобрабатывать его по-разному.
Примечание: p
должен указывать на элемент head, поэтому рискованно использовать его также для перебора списка в add
, а затем восстановления его исходного значения (сохраненов r
).Почему бы просто не оставить его без изменений и использовать r
для итерации?Еще один шанс для ошибок.