Я получил 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? Или моя проблема вызвана другими причинами? Спасибо.