new[]分配的内存大小
Size of memory allocated by new[]
我正在调查一个崩溃,我在
下面有堆栈跟踪...
12 4292e2c4 73148e89 KERNELBASE!RaiseException+0x58
13 4292e2fc 73150e7c MSVCR80!_CxxThrowException+0x46 [f:ddvctoolscrt_bldself_x86crtprebuildehthrow.cpp @ 161]
14 4292e318 386f21ba MSVCR80!operator new+0x69 [f:ddvctoolscrt_bldself_x86crtsrcnew.cpp @ 63]
15 4292e32c 386f1f39 StatEngineProxy!std::allocator<myClass>::allocate+0x1a [c:program files (x86)microsoft visual studio 8vcincludexmemory @ 146]
16 4292e384 386ef7e8 myModule!std::vector<myClass,std::allocator<myClass> >::_Insert_n+0xf9 [c:program files (x86)microsoft visual studio 8vcincludevector @ 1138]
17 4292e3b0 386ec20f myModule!std::vector<myClass,std::allocator<myClass> >::insert+0x88 [c:program files (x86)microsoft visual studio 8vcincludevector @ 855]
18 4292e3dc 3872bb17 myModule!std::vector<myClass,std::allocator<myClass> >::push_back+0xaf [c:program files (x86)microsoft visual studio 8vcincludevector @ 800]
....
原因很简单:bad_alloc
。问题是我如何才能找到多少内存仍然试图分配。
将try...catch
添加到该类中的所有新[]中,然后在catch
子句中设置详细的调试信息
您可以给STL一个自定义分配器,这样它的所有内存请求都将通过您提供的函数。
这里有一个例子:http://www.sjbrown.co.uk/2004/05/01/pooled-allocators-for-the-stl/
很简单。你得到了CRT的光源。(可能在C:Program FilesMicrosoft Visual Studio 10.0VCcrtsrcnew.cpp
)。因此,您可以查看第14帧的源代码和变量
您会发现第58行看起来像void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
。参数size
就是你要找的
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配