调用malloc / new

时间:2015-10-01 09:29:46

标签: c++ memory-management

我一直在尝试确定一个月内此次访问冲突问题的根本原因。但我最终在这里寻求帮助。

在较高的层面上,问题是堆损坏。如果我进一步深入了解在堆上分配内存(使用新)或释放内存(使用删除)期间获得这些异常。这些问题仅在生产环境中出现。我通过分析核心转储文件找到了这些细节。我无法在本地模拟这些问题。在其中一个核心转储文件中,我发现以下代码行触发了访问冲突问题。 this-> token = new Byte [obj.tokenLength]; 此处tokenLength为972.

在为执行请求一定量内存时抛出访问冲突的原因是什么。据我所知,当我用一些n字节调用malloc时,内核必须提供所请求的n个字节,或者必须拒绝并抛出BAD_ALLOC异常。抛出访问冲突异常的重点是什么。

这是核心转储文件中的调用堆栈。最后一行是调用 this-> token = new Byte [obj.tokenLength];

ntdll.dll!@RtlpAllocateHeap@24()   Unknown
ntdll.dll!_RtlAllocateHeap@12()    Unknown
ntdll.dll!@RtlpAllocateUserBlock@12()  Unknown
ntdll.dll!@RtlpLowFragHeapAllocFromContext@8() Unknown
ntdll.dll!_RtlAllocateHeap@12()    Unknown
caconnector.dll!malloc(unsigned int size=972) Line 163  C
caconnector.dll!operator new(unsigned int size=972) Line 59 C++
caconnector.dll!GLSPlatformSessionInfo::GLSPlatformSessionInfo(const GLSPlatformSessionInfo & obj={...}) Line 282

请帮助我正确分析方向,我现在可以集中精力确定这个问题的根本原因。

提前致谢。

0 个答案:

没有答案