Изучение дампа стека:
InitTerm - это просто функция, которая просматривает список других функций и выполняет каждую в шаге - она используется, среди прочего, для глобальных конструкторов (при запуске), глобальных деструкторов (при выключении) и списков atexit (также при выключении) ).
Вы связываетесь с CGAL, поскольку значение CGAL::Random::Random
в дампе стека связано с тем, что CGAL определяет глобальную переменную с именем default_random
типа CGAL::Random::Random
. Вот почему ваша ошибка происходит до main, default_random
создается.
Из источника CGAL все, что он делает, называется стандартным C srand(time(NULL))
, за которым следует локальный get_int
, который, в свою очередь, вызывает стандартный C rand()
, чтобы получить случайное число.
Однако вы не переходите ко второму этапу, поскольку дамп стека все еще находится в пределах srand()
.
Это выглядит , как будто он лениво преобразует ваш поток в волокно, т. Е. Это первый раз, когда вы пытаетесь что-то сделать в потоке, и ему нужно настроить локальное хранилище, прежде чем продолжить .
Итак, пара вещей, которые нужно попробовать и исследовать.
1 / Вы используете этот код на pre-XP? Я считаю, что локальное хранилище данных (__set_flsgetvalue
) было введено в XP. Это длинный выстрел, но мы все равно должны его очистить.
2 / Вам нужно связаться с CGAL? Я предполагаю, что вашему приложению нужно что-то в библиотеках CGAL, иначе не связывайтесь с этим. Это может быть похмелье из другого файла проекта.
3 / Если вы действительно используете CGAL, убедитесь, что вы используете последнюю версию. Начиная с версии 3.3 он поддерживает динамическое связывание, которое должно исключать возможность смешивания разных версий библиотеки (как статической / динамической, так и отладочной / не отладочной).
4 / Вы можете попробовать скомпилировать с VC8? Платформы, поддерживаемые CGAL, НЕ , но включают VC9 (VS2008). Возможно, вам придется проконсультироваться с самой командой CGAL, чтобы узнать, работают ли они над этой поддержкой.
5 / И, наконец, у вас установлен Boost? Это еще один длинный выстрел, но все равно стоит посмотреть.
Если ни одно из этих предложений не поможет, вам придется подождать, пока кто-нибудь более осведомленный, чем я, не боится.
Удачи.