FAULTING_IP: kernel32!RaiseException+537d4e237e 5e pop esi
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)ExceptionAddress: 7d4e237e (kernel32!RaiseException+0x00000053) ExceptionCode: e06d7363 (C++ EH exception) ExceptionFlags: 00000001NumberParameters: 3 Parameter[0]: 19930520 Parameter[1]: 405dfc9c Parameter[2]: 7c1c68e4
DEFAULT_BUCKET_ID: CORRUPT_MODULELIST
PROCESS_NAME: FieldServer.exe
OVERLAPPED_MODULE: Address regions for 'FieldServer' and 'Unknown_Module_002e0032' overlap
ERROR_CODE: (NTSTATUS) 0xe06d7363 - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xe06d7363 - <Unable to get error code text>
EXCEPTION_PARAMETER1: 19930520
EXCEPTION_PARAMETER2: 405dfc9c
EXCEPTION_PARAMETER3: 7c1c68e4
FAULTING_THREAD: 00000bc0
PRIMARY_PROBLEM_CLASS: CORRUPT_MODULELIST
BUGCHECK_STR: APPLICATION_FAULT_CORRUPT_MODULELIST_OVERLAPPED_MODULE
LAST_CONTROL_TRANSFER: from 7c359aed to 7d4e237e
STACK_TEXT: 405dfc4c 7c359aed e06d7363 00000001 00000003 kernel32!RaiseException+0x53405dfc8c 7c1c68e2 405dfc9c 7c1c68e4 7c21db80 msvcr71!_CxxThrowException+0x34405dfca0 7c179aff 00000968 029e10d8 5da32270 mfc71!AfxThrowMemoryException+0x19 [f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\except.cpp @ 220]405dfcb8 00554c84 00000968 3d200000 00000000 mfc71!operator new+0x27 [f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxmem.cpp @ 356]405dfce4 005b7d24 0004e7ff 3ce4c528 638e59e8 FieldServer!GLGaeaServer::SaveCharDB+0xc4 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1387]405dfe64 005c7380 478afa57 3d200000 00000094 FieldServer!GLChar::FrameMove+0x174 [d:\code\clientlib\g-logic\glchar.cpp @ 3497]405dfeac 0054ef46 478afa57 3d200000 405dff68 FieldServer!GLLandMan::FrameMove+0x1e0 [d:\code\clientlib\g-logic\gllandman.cpp @ 2396]405dfec8 00556fc1 478afa57 3d200000 00000000 FieldServer!GLGaeaServer::FrameMoveLandMan+0x46 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1714]405dfee0 0056b88b 478afa57 3d200000 0040dff6 FieldServer!GLGaeaServer::FrameMove+0x61 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1753]405dfeec 0040dff6 00000000 08beb058 3fc39f70 FieldServer!DxFieldInstance::FrameMove+0xdb [d:\code\clientlib\dxserverinstance.cpp @ 269]405dff68 0040e67e 3cfc05a0 08beb058 405dffa8 FieldServer!CFieldServer::Update+0x1e6 [d:\code\netserverlib\s_cfieldserverthread.cpp @ 285]405dff80 0040e6b9 7c349565 08beb058 00000000 FieldServer!CFieldServer::UpdateProc+0x7e [d:\code\netserverlib\s_cfieldserverthread.cpp @ 356]405dff84 7c349565 08beb058 00000000 00000000 FieldServer!CServerUpdateProc+0x9 [d:\code\netserverlib\s_cserver.h @ 242]405dffb8 7d4dfe37 3fc39f70 00000000 00000000 msvcr71!_threadstartex+0x6f [f:\vs70builds\3052\vc\crtbld\crt\src\threadex.c @ 241]405dffec 00000000 7c3494f6 3fc39f70 00000000 kernel32!BaseThreadStart+0x34
FOLLOWUP_IP: mfc71!AfxThrowMemoryException+19 [f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\except.cpp @ 220]7c1c68e2 90 nop
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: mfc71!AfxThrowMemoryException+19
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: mfc71
IMAGE_NAME: mfc71.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 3e77fdfd
STACK_COMMAND: ~11s; .ecxr ; kb
FAILURE_BUCKET_ID: CORRUPT_MODULELIST_e06d7363_mfc71.dll!AfxThrowMemoryException
BUCKET_ID: APPLICATION_FAULT_CORRUPT_MODULELIST_OVERLAPPED_MODULE_mfc71!AfxThrowMemoryException+19
Followup: MachineOwner---------
0:011> kc405dfc4c 7c359aed kernel32!RaiseException+0x53405dfc8c 7c1c68e2 msvcr71!_CxxThrowException+0x34405dfca0 7c179aff mfc71!AfxThrowMemoryException+0x19 [f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\except.cpp @ 220]405dfcb8 00554c84 mfc71!operator new+0x27 [f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxmem.cpp @ 356]405dfce4 005b7d24 FieldServer!GLGaeaServer::SaveCharDB+0xc4 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1387]405dfe64 005c7380 FieldServer!GLChar::FrameMove+0x174 [d:\code\clientlib\g-logic\glchar.cpp @ 3497]405dfeac 0054ef46 FieldServer!GLLandMan::FrameMove+0x1e0 [d:\code\clientlib\g-logic\gllandman.cpp @ 2396]405dfec8 00556fc1 FieldServer!GLGaeaServer::FrameMoveLandMan+0x46 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1714]405dfee0 0056b88b FieldServer!GLGaeaServer::FrameMove+0x61 [d:\code\clientlib\g-logic\glgaeaserver.cpp @ 1753]405dfeec 0040dff6 FieldServer!DxFieldInstance::FrameMove+0xdb [d:\code\clientlib\dxserverinstance.cpp @ 269]405dff68 0040e67e FieldServer!CFieldServer::Update+0x1e6 [d:\code\netserverlib\s_cfieldserverthread.cpp @ 285]405dff80 0040e6b9 FieldServer!CFieldServer::UpdateProc+0x7e [d:\code\netserverlib\s_cfieldserverthread.cpp @ 356]405dff84 7c349565 FieldServer!CServerUpdateProc+0x9 [d:\code\netserverlib\s_cserver.h @ 242]405dffb8 7d4dfe37 msvcr71!_threadstartex+0x6f [f:\vs70builds\3052\vc\crtbld\crt\src\threadex.c @ 241]405dffec 00000000 kernel32!BaseThreadStart+0x34
感谢 Raymond 的回应,我将出错时的代码以及我修改后的代码都发送到您的邮箱里了,麻烦您抽空帮忙看一下我修改的地方是否正确,谢谢
在应用程序中分配内存(new)失败可能有多种原因,常见的有以下两种:
1)要分配的内存块较大,内存管理器确实无法满足这样的分配要求,比如进程的地址空间“用完”
2)堆损坏(heap corruption),堆管理器在分配内存(寻找空闲块)的过程中遇到错误,直接导致崩溃或者返回错误
根据贴出的信息来看,第二种原因的可能性比较高。导致堆损坏的原因很多,重复释放,使用释放了块,溢出等。建议尝试以下方法:
1)启用页堆,寻找溢出
2)检查源代码,找可能的内存指针误用
3)在调试器中分析堆,寻找线索