NSMutableString и ноль для управления памятью

void print(const std::vector<int> ivec, std::vector<int>::const_iterator it) {

Параметр ivec передается по значению. Оба эти параметра передаются по значению. Передача по значению означает, что внутри функции это копий исходных параметров.

Ваш main() вызывает эту рекурсивную функцию, передавая ей свой вектор и начальный итератор своего вектора. Однако, поскольку все параметры передаются по значению, каждая рекурсивная итерация функции сравнивает итератор с end() совершенно другого вектора. Неопределенное поведение.

Вы, очевидно, забыли передать вектор по ссылке. Первый параметр должен быть const std::vector<int> &ivec.

5
задан Jim Puls 27 November 2009 в 00:42
поделиться

5 ответов

Прочитайте основную документацию. Установка переменной foo к нолю ничего не делает к его предыдущему содержанию.Помните, foo просто указатель на объект; для использования его необходимо заставить его указать на доступный объект. Только заставить его не указать на тот объект больше не выпускает объект.

8
ответ дан 18 December 2019 в 08:31
поделиться

То, что все сказали выше, абсолютно верно. Вам нужен выпуск в том фрагменте кода.

Однако важно иметь в виду, что присвоение свойству понизит сохранить количество, если это будет правильным поступком. Это:

foo = nil;         // doesn't lower
bar.foo = nil;     // probably does

Свойства похожи на обычные переменные, но они действительно не; они обрабатывают свое собственное управление памятью разумно. Это - что-то для учета, когда Вы работаете с ними.

4
ответ дан 18 December 2019 в 08:31
поделиться

Присвоение ноля к переменной не влияет на значение, которое было ранее там. Сохраните количества, только понижены release.

Необходимо прочитать инструкции по управлению памятью Какао Apple. Система подсчета ссылок какао не является настолько трудной, но это - что-то, что необходимо изучить, и если Вы не изучите это правильно, то Ваша программа будет иметь много тонких ошибок, которые сведут Вас с ума.

5
ответ дан 18 December 2019 в 08:31
поделиться
это понижает сохранить количество на 1, таким образом эффективно освобождая память?

Нет

Необходимо использовать

[foo release]
2
ответ дан 18 December 2019 в 08:31
поделиться

foo = nil; не понизит сохранить количество объекта. Это просто сделает foo не укажите нигде вместо на объект. Для постепенного уменьшения сохранить количества необходимо будет сказать [foo release];.

0
ответ дан 18 December 2019 в 08:31
поделиться