void print(const std::vector<int> ivec, std::vector<int>::const_iterator it) {
Параметр ivec
передается по значению. Оба эти параметра передаются по значению. Передача по значению означает, что внутри функции это копий исходных параметров.
Ваш main()
вызывает эту рекурсивную функцию, передавая ей свой вектор и начальный итератор своего вектора. Однако, поскольку все параметры передаются по значению, каждая рекурсивная итерация функции сравнивает итератор с end()
совершенно другого вектора. Неопределенное поведение.
Вы, очевидно, забыли передать вектор по ссылке. Первый параметр должен быть const std::vector<int> &ivec
.
Прочитайте основную документацию. Установка переменной foo
к нолю ничего не делает к его предыдущему содержанию.Помните, foo
просто указатель на объект; для использования его необходимо заставить его указать на доступный объект. Только заставить его не указать на тот объект больше не выпускает объект.
То, что все сказали выше, абсолютно верно. Вам нужен выпуск в том фрагменте кода.
Однако важно иметь в виду, что присвоение свойству понизит сохранить количество, если это будет правильным поступком. Это:
foo = nil; // doesn't lower
bar.foo = nil; // probably does
Свойства похожи на обычные переменные, но они действительно не; они обрабатывают свое собственное управление памятью разумно. Это - что-то для учета, когда Вы работаете с ними.
Присвоение ноля к переменной не влияет на значение, которое было ранее там. Сохраните количества, только понижены release
.
Необходимо прочитать инструкции по управлению памятью Какао Apple. Система подсчета ссылок какао не является настолько трудной, но это - что-то, что необходимо изучить, и если Вы не изучите это правильно, то Ваша программа будет иметь много тонких ошибок, которые сведут Вас с ума.
это понижает сохранить количество на 1, таким образом эффективно освобождая память?
Нет
Необходимо использовать
[foo release]
foo = nil;
не понизит сохранить количество объекта. Это просто сделает foo
не укажите нигде вместо на объект. Для постепенного уменьшения сохранить количества необходимо будет сказать [foo release];
.