2015-08-03 103 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