__forceinline void * __cdecl _heap_alloc (size_t size){
#ifndef _WIN64
    void *pvReturn;
#endif  /* _WIN64 */    if (_crtheap == 0) {
        _FF_MSGBANNER();    /* write run-time error banner */
        _NMSG_WRITE(_RT_CRT_NOTINIT);  /* write message */
        __crtExitProcess(255);  /* normally _exit(255) */
    }#ifdef _WIN64
    return HeapAlloc(_crtheap, 0, size ? size : 1);--》每次到这里都出错。
#else  /* _WIN64 */
    if (__active_heap == __SYSTEM_HEAP) {
        return ;
    } else
    if ( __active_heap == __V6_HEAP ) {
        if (pvReturn = V6_HeapAlloc(size)) {
            return pvReturn;
        }
    }
#ifdef CRTDLL
    else if ( __active_heap == __V5_HEAP )
    {
        if (pvReturn = V5_HeapAlloc(size)) {
            return pvReturn;
        }
    }
#endif  /* CRTDLL */    if (size == 0)
        size = 1;    size = (size + BYTES_PER_PARA - 1) & ~(BYTES_PER_PARA - 1);    return HeapAlloc(_crtheap, 0, size);#endif  /* _WIN64 */
}
我是调用的COM的一个接口函数,获取数据,返回的是_bstr_t类型。
我刚才参加了一下:http://blog.csdn.net/lsaturn/archive/2007/03/08/1523770.aspx 
但还是不是很懂,我该怎么操作啊?

解决方案 »

  1.   

    我是调用的COM的一个接口函数,获取数据,返回的是_bstr_t类型。跟_heap_alloc 有什么关系?不明白楼主想做什么?
      

  2.   

    我晕了。楼主机器是Win64位的?另COM可以用CoTaskMemAlloc、CoTaskMemFree之类的来代替HeapAlloc。
    至于COM中_bstr_t类型实际上是对SysAllocString、SysFreeString的封装。
    这两套函数都可以跨Dll销毁内存。
      

  3.   


    我那个COM是封装了的,供应商提供的。不知道里面怎么实现的。
    当我定义一个_bstr_t bstr,并用SysAllocString(_T(""));初始化后,再用
    bstr = 函数,去调用。这样好像比刚才好了些,但是,还是出错。
      

  4.   

    封装了的COM要看说明书........是不是传的参数没有正确........
      

  5.   

    感觉好像是size值有问题?调试的时候记得把参数输出。
    要么就是你没按供应商的要求调用他的函数,要么是他的函数写的有问题。