查看: 1372|回复: 2

在osg3.0 + win7下遇到创建对象的问题

[复制链接]

该用户从未签到

发表于 2011-11-28 14:24:43 | 显示全部楼层 |阅读模式
为什么写上这句话,osg::ref_ptr<osgAnimation::Bone> root = new osgAnimation::Bone;
程序会报错呢?
错误:
OsgTest1.exe 中的 0x75d1d36f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0029e8f4 处的 std::bad_alloc。

在这句话前面加上断点,发现程序最后进入到new.cpp文件,在下面的_RAISE(nomem);中卡住了,同样的情况还有创建一个channel指针,但是创建Skeleton对象就没问题


#ifdef _SYSCRT
#include <cruntime.h>
#include <crtdbg.h>
#include <malloc.h>
#include <new.h>
#include <stdlib.h>
#include <winheap.h>
#include <rtcsup.h>
#include <internal.h>

void * operator new( size_t cb )
{
    void *res;

    for (;;) {

        //  allocate memory block
        res = _heap_alloc(cb);

        //  if successful allocation, return pointer to memory

        if (res)
            break;

        //  call installed new handler
        if (!_callnewh(cb))
            break;

        //  new handler was successful -- try to allocate again
    }

    RTCCALLBACK(_RTC_Allocate_hook, (res, cb, 0));

    return res;
}
#else  /* _SYSCRT */

#include <cstdlib>
#include <new>

_C_LIB_DECL
int __cdecl _callnewh(size_t size) _THROW1(_STD bad_alloc);
_END_C_LIB_DECL

void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
        {       // try to allocate size bytes
        void *p;
        while ((p = malloc(size)) == 0)
                if (_callnewh(size) == 0)
                {       // report no memory
                static const std::bad_alloc nomem;
                _RAISE(nomem);
                }

        return (p);
        }

/*
* Copyright (c) 1992-2002 by P.J. Plauger.  ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V3.13:0009 */
#endif  /* _SYSCRT */


该用户从未签到

发表于 2011-12-1 09:26:50 | 显示全部楼层
您发来的代码没有任何意义,您是否混用了debug与release库?

该用户从未签到

发表于 2012-2-1 20:53:57 | 显示全部楼层
看起来是静态库和源码不兼容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表