2015-08-03 97 views
1

我正在使用Boost 1.58 64位,VC++ 2013,64位项目。使用boost :: pool。Boost pool malloc()和free()编译器错误

以前使用升压1.54,也没有问题,叫:

boost::pool malloc() 

boost::pool free(p) 

现在,这两种方法都扔:

错误C2039: '_malloc_dbg':不是 的成员'boost :: pool'

错误C2039: '_free_dbg':是不是 '的boost ::池'

相应的成员。

我是否错过任何使编译器将malloc和free作为pool类成员对待的指令?

UPDATE:

我看到它发生只有头内嵌methods.If我叫他们的.cpp我没有错误内。

实施例:

inline void* MemoryManager::AllocMemory(){ 

    return m_pool->malloc(); 
} 

抛出编译器错误。

+3

这将是一些宏重新定义malloc,在标题中尝试#undef malloc – paulm

+0

这看起来像问题,但我想知道是否有一些比使用#undef更少的残酷的力量解决方案(或者也许更残酷的力量:) ) –

+4

不使用重新定义'malloc'的低劣库会是一个开始。 –

回答

4

crtdbg.h从Windows包含行:

#ifdef _CRTDBG_MAP_ALLOC 

#define malloc(s)    _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) 
#define calloc(c, s)   _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__) 
#define realloc(p, s)   _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) 
... 

尝试#undef _CRTDBG_MAP_ALLOC

编辑:#define _AFX_NO_DEBUG_CRT应防止crtdbg.h被包括在内。将其添加到项目设置中,或在包含任何Windows标头之前。

+0

有趣的是@Lightness Races对此有何评论。 –

+0

但它没有帮助。 –

+0

@MichaelIV我编辑了我的答案,希望它有效。 – alain