Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost池malloc()和free()编译器错误_C++_Boost - Fatal编程技术网

C++ Boost池malloc()和free()编译器错误

C++ Boost池malloc()和free()编译器错误,c++,boost,C++,Boost,我正在使用Boost 1.58 64位,VC++2013,64位项目。使用Boost::pool 以前使用过Boost 1.54,调用时没有问题: boost::pool malloc() 及 现在,两种方法都是: 错误C2039:“\u malloc\u dbg”:不是的成员 'boost::pool' 及 错误C2039:“\u free\u dbg”:不是“boost::pool”的成员 因此 我是否错过了使编译器将malloc和free视为池类成员的任何指令 更新: 我发现它只发

我正在使用Boost 1.58 64位,VC++2013,64位项目。使用Boost::pool

以前使用过Boost 1.54,调用时没有问题:

 boost::pool  malloc() 

现在,两种方法都是:

错误C2039:“\u malloc\u dbg”:不是的成员 'boost::pool'

错误C2039:“\u free\u dbg”:不是“boost::pool”的成员

因此

我是否错过了使编译器将malloc和free视为池类成员的任何指令

更新:

我发现它只发生在头内联方法中。如果我在.cpp中调用它们,我就没有错误

例如:

inline void* MemoryManager::AllocMemory(){

    return  m_pool->malloc();
}

抛出编译器错误。

来自Windows的crtdbg.h包含以下行:

#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__)
...
尝试
#取消定义(CRTDBG)映射(ALLOC)


编辑:
\define\u AFX\u NO\u DEBUG\u CRT
应防止
crtdbg.h
被包括在内。将其添加到项目设置中,或在包含任何Windows标题之前添加。

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__)
...
尝试
#取消定义(CRTDBG)映射(ALLOC)



编辑:
\define\u AFX\u NO\u DEBUG\u CRT
应防止
crtdbg.h
被包括在内。将其添加到项目设置中,或者在包含任何Windows标题之前。

这将是一些宏重新定义malloc,请尝试在标题中取消malloc。这看起来像是问题所在,但我想知道是否有比使用“取消定义”(或者可能是更残酷的强制:)更残酷的强制解决方案)不使用重新定义malloc的糟糕库将是一个开始。@MichaelIV:我没有把Boost称为“糟糕库”。您正在使用另一个库,它将
malloc
重新定义为宏,并在
boost::pool
中破坏此成员。这就是为什么会出现编译错误。通过预处理器运行您的代码,您就会看到。叹气吧,好吧,您知道的最好。这将是一些宏重新定义malloc,尝试在header中#undef malloc这看起来是个问题,但我想知道是否有比使用#undef(或者更残酷的武力:)更残酷的武力解决方案)不使用重新定义malloc的糟糕库将是一个开始。@MichaelIV:我没有把Boost称为“糟糕库”。您正在使用另一个库,它将
malloc
重新定义为宏,并在
boost::pool
中破坏此成员。这就是为什么会出现编译错误。通过预处理器运行您的代码,您就会看到。叹气吧,好吧,那您就知道了。有趣的是@Lightness Races对它所说的话。也不起作用。将其放入项目属性预处理器。如果您将其作为
stdafx.h
的第一行,还有clean+rebuild?我不使用预编译的标题。我会将您的答案标记为正确的,但对我来说仍然没有帮助。有趣的是@Lightness Races对此有何评论。也不起作用。将其放入项目属性预处理器。如果您将其作为
stdafx.h
的第一行,还有clean+rebuild?我不使用预编译头。我会将您的答案标记为正确答案,但对我来说仍然没有帮助。