Сегфагтинг означает попытку манипулировать областью памяти, которая не должна быть доступна приложению.
Это означает, что ваша проблема может возникнуть из трех случаев:
- Попытка сделатьчто-то с указателем, который указывает на NULL;
- Попытка сделать что-то с неинициализированным указателем;
- Попытка сделать что-то с указателем, который указывает на удаленный объект;
1) легко проверить, поэтому я предполагаю, что вы уже делаете это, поскольку обнуляете указатели в векторе.Если вы не делаете проверки, то делайте это до вызова удаления.Это укажет случай, когда вы пытаетесь удалить объект дважды.3) не может произойти, если вы установите NULL для указателя в векторе.
2) тоже может случиться.В вашем случае вы используете std :: vector, верно?Убедитесь, что неявные манипуляции с вектором (например, перераспределение внутреннего буфера, когда он уже недостаточно велик) не повредят ваш список.
Итак, сначала убедитесь, что вы удалили указатели NULL (обратите внимание, что delete(NULL) не сгенерирует! Это стандартное и правильное поведение!) - в вашем случае вам не нужно пытаться удалить (NULL).Тогда, если этого никогда не произойдет, убедитесь, что у вас нет векторного заполнения указателями, указывающими на корзину.Например, вам следует убедиться, что вы знакомы с идиомой [Remove-Erase] [1].
Теперь, когда вы добавили некоторый код, я думаю, что вижу проблему:
int tid = _myVec.size();
В качестве идентификаторов вы используете indice.
Теперь все зависит от того, как вы удаляете свои объекты. (пожалуйста, покажите его для более полного ответа)
- Вы просто установите указатель на NULL.
- Вы удаляете указатель из вектора.
Если вы только делаете 1), тогда это должно быть безопасно (если вам не нужен вектор, который растет и никогдаполучить релиз и идентификаторы не используются повторно).Если вы сделаете 2., то это все неправильно: каждый раз, когда вы удаляете объект из вектора, весь объект все еще содержится после того, как положение удаленного объекта будет понижено на единицу.Принятие недопустимым любого сохраненного идентификатора / индекса.
Убедитесь, что вы последовательны в этом, это, безусловно, источник ошибок.