Boost с box2d - PullRequest
       3

Boost с box2d

0 голосов
/ 28 июля 2011

Я пытаюсь использовать повышение в моей игре box2d.Но когда я создаю b2world, boost вылетает.

#include <Box2d/Box2D.h>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>

namespace fs = boost::filesystem;


int main(int argc, char *argv[])
{
  b2World *world = new b2World(b2Vec2(0.0f, -10.0f), true);

  fs::path full_path(fs::initial_path<fs::path>());

  delete world;

  return 0;
}

Когда я комментирую строку с box2d или кодом boost, все работает нормально.Но они не хотят работать вместе.

Ошибка: необработанное исключение в 0x5d9031ea (msvcr90d.dll) в Game.exe: 0xC0000005: расположение чтения нарушения доступа 0xccccccc0.

>   msvcr90d.dll!operator delete(void * pUserData=0xcccccccc)  Line 52 + 0x3 bytes  C++
    msvcp90d.dll!std::allocator<unsigned short>::deallocate(unsigned short * _Ptr=0xcccccccc, unsigned int __formal=3435973837)  Line 146 + 0x9 bytes   C++
    msvcp90d.dll!std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> >::_Tidy(bool _Built=true, unsigned int _Newsize=0)  Line 2168    C++
    msvcp90d.dll!std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> >::~basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> >()  Line 917 C++
    Game.exe!boost::filesystem3::path::~path()  + 0x2e bytes    C++
    Game.exe!main(int argc=1, char * * argv=0x003a4ca0)  Line 32 + 0x19 bytes   C++
    Game.exe!__tmainCRTStartup()  Line 582 + 0x19 bytes C

Производится только в режиме отладки.

Неважно, где я создаю объект b2World: после full_path () или нет.Ошибка приводит даже к тому, что я создаю объект b2World в другом классе или в файле проекта.

1 Ответ

0 голосов
/ 28 июля 2011

Ну, вам будет очень трудно указать точную причину проблемы, но, похоже, у вас куча повреждений. Найти виновника (фрагмент кода, который перезаписывает или освобождает некоторую память, чего не должно быть) может быть довольно сложно, поскольку эффекты (сбои) часто можно увидеть намного позже и в некоторых не связанных частях кода;

Вы пробовали другие параметры в настройках библиотеки времени выполнения на вкладке "генерация кода"? Иногда смешивание разных библиотек с разными CRT может привести к сбоям (хотя обычно вы получаете ошибку компоновки).

Тогда, если ничего не поможет, я бы посоветовал вам попытаться изолировать проблему и создать минимальный проект, в котором проблема обнаруживается, это отнимает много времени, но может помочь, поскольку, как уже было сказано, эти проблемы очень трудно найти.

Оттуда вы также можете использовать некоторые дополнительные инструменты, которые могут помочь в отслеживании повреждений кучи. Например, вы можете использовать gflags (из пакета Debugging Tools for Windows), чтобы активировать опцию «кучи страниц» для вашего приложения, это приведет к прерыванию выполнения отладчика при обнаружении повреждения кучи.

...