Реализация списка пропуска C ++ — возвращаемое значение повреждено, утечка памяти?

Я хочу реализовать список пропусков, мой код не полон и ему нужно еще несколько функций и переменных, но я нахожусь на этом уровне разработки, и у меня уже возникли проблемы.

Строки 160 и 133 должны возвращать одно и то же значение, в этом примере 5, но каким-то образом оно повреждено и 160 возвращает какое-то странное целое число (я полагаю, что оно обращается к некоторой памяти, которая не выделена)

Я запустил Valgrind и получил следующее:

height insert 5
b.second 5
==9440== Conditional jump or move depends on uninitialised value(s)
==9440==    at 0x40C21BD: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C2502: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CDEBB: std::ostream& std::ostream::_M_insert<long>(long) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CE042: std::ostream::operator<<(int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x41654D2: (below main) (libc-start.c:226)
==9440==
==9440== Use of uninitialised value of size 4
==9440==    at 0x40C1C53: ??? (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C21F0: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C2502: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CDEBB: std::ostream& std::ostream::_M_insert<long>(long) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CE042: std::ostream::operator<<(int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x41654D2: (below main) (libc-start.c:226)
==9440==
==9440== Conditional jump or move depends on uninitialised value(s)
==9440==    at 0x40C1C5C: ??? (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C21F0: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C2502: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CDEBB: std::ostream& std::ostream::_M_insert<long>(long) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CE042: std::ostream::operator<<(int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x41654D2: (below main) (libc-start.c:226)
==9440==
==9440== Conditional jump or move depends on uninitialised value(s)
==9440==    at 0x40C221A: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40C2502: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CDEBB: std::ostream& std::ostream::_M_insert<long>(long) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x40CE042: std::ostream::operator<<(int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==9440==    by 0x41654D2: (below main) (libc-start.c:226)
==9440==
find main 68678181

Я знаю, что мне нужно удалить Car-Objects, но я сделаю это где-нибудь в конце программы, и я не верю, что это является причиной проблемы.

Было бы хорошо, если бы кто-то мог показать мне мои ошибки и почему моя переменная повреждена.

Спасибо за последнее время

0

Решение

Возвращаемое значение неинициализировано, потому что ваш метод поиска является рекурсивным. Вы не передаете результат финального вызова обратно в основной метод.

Фактически, ваш компилятор должен предупреждать вас, что у вашего метода find есть пути, которые не возвращают значение. Например, если r == NULL и (* anf) .down! = NULL, то в конечном итоге вы упадете до конца метода и ничего не вернете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector