Поток 1: Программа получила сигнал: «EXC_BAD_ACCESS» - PullRequest
1 голос
/ 10 декабря 2011

Я сейчас программирую iPhone-приложение для исследования зрелости.Но есть поведение, которое я не понимаю: иногда, когда я компилирую свой проект, есть:

Поток 1: Программа получила сигнал: "EXC_BAD_ACCESS".

Нокогда я компилирую один и тот же код второй или третий раз, код работает нормально, и я не могу понять, почему.Я использую некоторую MonteCarloSimulation, но когда она терпит неудачу, она не выполняет одну из первых 100 симуляций.Но когда каждая вещь работает нормально, она выполняет 1000000 симуляций без ошибки. Действительно странно, не правда ли?

У вас есть идеи?Может ли это быть проблемой Xcode или arc?Все остальные вещи просто отлично работают.Вы должны получить дополнительную информацию?Я также могу выслать вам свой код по электронной почте.

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

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

Для отладки этих вещей в Objective C используется нечто, называемое "NSZombie", которое будет держать эти объекты вокруг, чтобы вы моглипо крайней мере, увидеть, что это такое, что пытается быть названным.См. этот вопрос , чтобы узнать, как его использовать.

0 голосов
/ 10 декабря 2011

Обычно это вызвано доступом к некоторой памяти, которая была повреждена, скорее всего, у вас есть ссылка на объект, который был удален. В большинстве случаев вы можете обнаружить, что память, в которой находился объект, еще не была перезаписана, поэтому, когда вы пытаетесь получить доступ к этой памяти, ваши данные остаются нетронутыми и проблем нет, следовательно, они работают некоторое время.

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

...