4

我编写了一个内存分配器来解决 C++ (mingw) 中默认内存分配器的速度问题。

为此,我重载了全局 new 和 delete。我通过的所有请求都正确分配了正确大小的内存,但我仍然遇到分段错误。这些错误似乎与向量的使用有关。

我假设这些向量将被 new 和 delete 的全局覆盖所覆盖,但我可能错了。所以我要问的是我是否需要一个 stl 分配器来处理我的内存分配器,或者使用我忽略的全局 new 和 delete 是否可能存在其他问题?

4

2 回答 2

5

我假设这些向量将被 new 和 delete 的全局覆盖所覆盖,但我可能错了。所以我要问的是我是否需要一个 stl 分配器来处理我的内存分配器,或者使用我忽略的全局 new 和 delete 是否可能存在其他问题?

C++ 标准(这里来自 C++11)说std::allocator(用于标准容器的默认分配器):

(§20.6.9/1) 备注:存储是通过调用 ::operator new(std::size_t) (18.6.1) 获得的,但未指定何时或多久调用此函数。[...]

因此,您没有实现与向量一起使用的特殊分配器类这一事实不是问题。问题可能是由于您对全局运算符本身的定义有问题,或者可能是您使用向量的方式有问题。建议的后续步骤是:

  • ::operator new未替换时检查代码是否有效
  • 使用调试器获取崩溃的堆栈跟踪并分析该点的堆栈以获取有关崩溃涉及哪些函数、该点的局部变量的值是什么等的线索。
于 2013-01-02T08:15:29.640 回答
0

我相信需要实施STL 分配器vector来控制分配

于 2013-01-02T07:58:12.870 回答