Boost 使用box2d进行增强

Boost 使用box2d进行增强,boost,box2d,Boost,Box2d,我试图在我的box2d游戏中使用boost。但当我创建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

我试图在我的box2d游戏中使用boost。但当我创建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;
}
#包括
#包括
#包括
名称空间fs=boost::filesystem;
int main(int argc,char*argv[])
{
b2World*world=新b2World(b2Vec2(0.0f,-10.0f),真);
fs::path full_path(fs::initial_path());
删除世界;
返回0;
}
当我用box2d或boost代码注释字符串时,它工作正常。但他们不想一起工作

错误:Game.exe中0x5d9031ea(msvcr90d.dll)处未处理的异常:0xC0000005:访问冲突读取位置0xCCC0

>   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
>msvcr90d.dll!运算符删除(Vult*PuleDATa= 0xccccccc)行52 +0x3字节C++
msvcp90d.dll!STD::分配器::DealPoint(未签名短**PTR= 0xccccccc,未签名int×Syral= 3435973837)行146 +0x9字节C++
msvcp90d.dll!STD::Basic字符串::(0)第2168行C++
msvcp90d.dll!STD::Basic字符串::~ Basic(917)C++
Game.exe!PosiSistEM3::路径::路径()+0x2e字节C++
Game.exe!主体(int ARCC=1,CHAR**ARGV= 0x00 3A4CA0)行32 +0x19字节C++
Game.exe__tmainCRTStartup()行582+0x19字节C
仅在调试模式下生成


我在哪里创建b2World对象并不重要:在full_path()之后还是不之后。即使我在project中的另一个类或文件中创建b2World对象,也会产生错误。

很难向您指出问题的确切原因,但您似乎有堆损坏。要找到罪魁祸首(覆盖或释放一些不该覆盖或释放的内存的代码片段)可能非常棘手,因为影响(崩溃)通常会在很久以后出现,并且出现在代码的一些不相关部分

您是否尝试过“代码生成”选项卡下运行时库设置下的其他选项?有时,将不同的库与不同的CRT混合使用可能会导致崩溃(尽管通常会出现链接错误)

如果没有任何帮助,我建议您尝试隔离问题,并在出现问题的地方创建一个最小的项目,这很耗时,但可以帮助很多,因为正如前面所说的,这些问题可能很难找到


在此基础上,您还可以使用一些其他工具来帮助跟踪堆损坏。例如,您可以使用gflags(来自Windows调试工具软件包)激活应用程序的“页面堆”选项,这将使调试器在检测到堆损坏时中断执行。

您很快就会发现,如果您没有包含更多的“it崩溃”,我们通常无法帮助调试您的错误。它是如何崩溃的?它会产生错误吗?是否添加了断点以查看它是否超过某一行?msvcr90d.dll!运算符删除(void*pUs…行52 msvcp90d.dll!std::alloct…行146+0x9字节msvcp90d.dll!std::basic_string@Raman:把它放在你的答案中,并格式化它。我不能,我的声誉不到100=)@Raman:你可以随时编辑你自己的问题。是别人的名声,我不使用MFC。请多加注意,我的错,不知道我在哪里看到了MFC,我现在编辑了我的答案。其余的仍然适用-我认为您正在处理堆损坏,您可以通过谷歌或搜索堆栈溢出来获得一些关于如何解决这些问题的提示(正如已经指出的,有时可能会非常棘手和耗时)