Ошибка сегментации при вызове «new» в C ++?

Я получил segfault при попытке вызвать "new" для создания указателя и вставьте его в вектор. Код, который я вставляю элемент в вектор, следующий:

queue->push_back(new Box(gen_id, Interval(x_mid, x_end), Interval(y_mid-y_halfwidth, y_mid+y_halfwidth)));

В основном Box - это класс, а конструктор принимает только 3 аргумента, generation_id и 2 интервала ]. Я распечатал содержимое в векторе до и после этого "push", before:

[ -0.30908203125, -0.3087158203125 ] , [ -0.951416015625, -0.9510498046875 ]
[ -0.3087158203125, -0.308349609375 ] , [ -0.951416015625, -0.9510498046875 ]
[ -0.30908203125, -0.3087158203125 ] , [ -0.9510498046875, -0.95068359375 ]
[ -0.3087158203125, -0.308349609375 ] , [ -0.9510498046875, -0.95068359375 ]

after:

[ -0.30908203125, -0.3087158203125 ] , [ -0.951416015625, -0.9510498046875 ]
[ -0.3087158203125, -0.308349609375 ] , [ -0.951416015625, -0.9510498046875 ]
[ 8.9039208750109844342e-243, 6.7903818933216500424e-173 ] , [ -0.9510498046875, -0.95068359375 ]
[ -0.3087158203125, -0.308349609375 ] , [ -0.9510498046875, -0.95068359375 ]
[ -0.3087158203125, -0.308349609375 ] , [ -0.95123291015625, -0.95086669921875 ]

Я не понимаю, почему это происходит, но, по-видимому, один элемент был поврежден. Между этими двумя наборами вывода нет никаких других кодов, кроме "push", и я использовал gdb, чтобы подтвердить это. Кроме того, я проверил эти 2 переменных Interval , обе дали мне результат, который имеет смысл.

Мои вопросы: в какой ситуации "новый" получает segfault? Или моя проблема вызвана другими причинами? Спасибо.

5
задан Oliver Charlesworth 6 September 2011 в 23:18
поделиться