Ошибка в этом конструкторе:
element_foo(int dat, element_foo next){
data.set_attr(dat);
ptr_next = &next;
}
Вы принимаете адрес местного жителя. ptr_next = &next;
Как только функция заканчивается, адрес становится недействительным.
Вам нужно передать next
в качестве указателя:
element_foo(int dat, element_foo *next){
data.set_attr(dat);
ptr_next = next;
}
И измените свою главную на это:
element_foo a1(10);
element_foo a2(15,&a1);
element_foo a3(20,&a2);
EDIT:
Кроме того, вы можете просто передать его по ссылке:
element_foo(int dat, element_foo &next){
data.set_attr(dat);
ptr_next = &next;
}