这个读访问违反异常是由什么引起的?

What could this Read Access violation Exception be due to?

本文关键字:什么 读访问 异常      更新时间:2023-10-16

程序崩溃,出现对话框

"Unhandled exception at 0x3aaf1aea (pmsqlsrv.dll) in java.exe: 0xC0000005:
Access violation reading location 0x3ac60880."

显示导致崩溃的语句是

m_pDatabase->m_pIDBCreateCommand->CreateCommand();

在手表窗口,

"this" pointer value for the containing object is 0x7395fcaf
m_pDatabase                                    is 0xffff8810 (does it look like a valid address?)
m_pDatabase->m_pIDBCreateCommand               CXX0030: Error: expression cannot be evaluated

崩溃对话框中显示的地址- 0xC0000005和0x3ac60880我不知道它们是什么。这是否意味着dll (pmsqlsrv.dll)本身已损坏,并且崩溃是在读取代码段而不是在访问数据?

在32位Windows中,地址0xC0000000及以上是为内核保留的。通常内核地址空间甚至从0x80000000开始。所以这个地址看起来确实不健康

0xC0000005是内核的"段故障"中断异常处理程序的地址:当试图访问不属于您的进程的内存地址时,它被调用。

你的m_pDatabase指向0xffff8810(非常奇怪的内存地址:指向静态数据区…初始化是否正确?)因为它很可能不是一个有效的地址,它包含一些无意义的值,使程序相信在m_pIDBCreateCommand中有一些东西(可能是一个随机值),通过它可以获得函数要调用的地址。这使得它在经过两次或三次间接访问后,可以访问其进程边界之外的内存。

查看m_pDatabase在整个程序中是如何初始化、赋值和更改的。