Я получил 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 Intervals
. Я распечатал содержимое в векторе до и после этого «толчка»,
до:
[ -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 ]
после
[ -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 Intervals
переменные, обе дают мне результат, который имеет смысл.
Мои вопросы: в какой ситуации «новый» получает сегфо? Или моя проблема вызвана другими вещами? Спасибо.