Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119636
  • 博文数量: 26
  • 博客积分: 1441
  • 博客等级: 上尉
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 20:35
文章存档

2011年(2)

2010年(5)

2009年(19)

我的朋友

分类: WINDOWS

2011-10-23 21:05:16

遇到的问题:
程序编译链接完成,在运行过程出现:**处未处理的异常: Microsoft C++ 异常: 内存位置0x0012f2c8 处的 std::bad_alloc。这个程序在VS2010中是能正常通过的,刚刚昨天才写。感觉VS2010太慢,就换了VS2008,看,出问题了吧!
程序是在VS2008建立的win32 控制台应用程序,然后新建main.cpp,就这么多。
  1. /*main.cpp文件
    1. */
  2. #include "stdafx.h"
  3. #include <osgDB/ReadFile>
  4. #include <osgViewer/Viewer>

  5. void main(){
  6.     osgViewer::Viewer viewer;
  7.     viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
  8.     viewer.realize();
  9.     viewer.run();
  10. }
解决过程:
有人在写OSG第一个程序时也遇到了问题,
帖子地址:

版主回答:
检查:
1 依赖库设置是否正确(Debug库对应Debug工程,Release对应Release工程);
2 OSG库版本的编译器版本(例如VS8)是否与工程所用编译器相符;
3 glider.osg是否存在并且可以正确读入

经过确认,不是1,3问题,把问题定位在2。
查资料得知:
没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8
打过SP1补丁的VS2008打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1
本机的情况是:
下载的二进制包是使用Visual Studio 9 (SP1 9.0.30729, 2008)编译而成。
安装的是Visual Studio 9 (SP1 9.0.21022.8, 2008)。可以看出编译器版本不一致。在OSG官网上特别指出,windows中不同开发化境编译的OSG安装包,最好在相同开发环境使用,也就是是说,VS2010编译的安装包,VS2008就不要使了,因为编译器版本不同。

下一步:
下载二进制源码包,在当前环境下编译,安装。
问题任然没有解决。

在下一步:
忽然想到,之前用的是VS2010,下载二进制安装包。感觉VS2010太臃肿,就换了VS2008。因为不同编译器(可以理解为不同的开发环境,或是不同版本)编译出的OSG包在其它环境中问题太多。所以我就下载适合VS2008的安装包,并保留之前OSG安装包。之前的OSG安装包改名为OSG2010,现在在VS2008中用的OSG安装包名民为OSG2008,给两者都设置了环境变量。哈哈,原来问题就在这里。把OSG201的环境变量删除,便可顺利运行。重复环境变量,而这两个环境变量又不分优先级,所以调用函数不成功,没有分配内存(具体过程不详,有待探索)。

最终问题得以解决。
阅读(11993) | 评论(0) | 转发(0) |
0

上一篇:博客已升级,请注意变更地址

下一篇:没有了

给主人留下些什么吧!~~